- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试让“下一个”和“上一个”按钮在我的程序中工作。下一个按钮按预期工作,但我无法获得上一个按钮的正确逻辑。我收到错误:
“线程“AWT-EventQueue-0”中出现异常 java.lang.ArrayIndexOutOfBoundsException:-1 在 Bookstore8$3.actionPerformed(Bookstore8.java:257)"
这是我的书店类(class),也许有人可以给我一些关于如何使“上一页”按钮的逻辑正确的建议?其他三个按钮工作正常。我只是无法弄清楚最后一个按钮。
/* Declare Bookstore Class */
public class Bookstore8 extends JFrame
{
/* Declare Index and Assign to First Part of the Array */
private static int bookstoreIndex = 0;
private static Book[] bookInventory = new Book[5];
public static JTextArea prepareDisplay(Book myBook, JTextArea myTextArea){
myTextArea.setText("");
myTextArea.append(myBook.toString());
return myTextArea;
}
/* Method to Sort Books */
public static Book [] sortArray(Book[] books) {
String[] titles = new String[books.length];
Book[] sortedBooks = new Book [books.length];
for (int i = 0; i < books.length; i++){
titles[i] = books[i].getBookTitle();
}
Arrays.sort(titles, String.CASE_INSENSITIVE_ORDER);
for (int i = 0; i < books.length; i++){
for (int j = 0; j < titles.length; j++){
if (books[i].getBookTitle().equalsIgnoreCase(titles[j])) {
sortedBooks[j] = books[i];
break;
}
}
}
return sortedBooks;
}
/* Method to Calculate Inventory */
public static double calculateInventoryTotal(Book[] books){
double total = 0;
for (int i = 0; i < books.length; i++) {
total += books[i].getBookPrice();
}
return total;
}
/* Main Method */
public static void main (String[] args){
/* Create Book Objects */
Book one = new Book ("TD45454545", "My First Java Stuff", "Dan Zaleski", 2014, "UPX", 19.99);
Book two = new Book ("KY67676767", "Hello From Boston", "Joe Smith", 1999, "Random House", 19.99);
Book three = new Book ("NCC7890987", "I Hate Onions", "John Cooper", 1990, "Random House", 9.99);
Book four = new Ebook ("YY00000000", "Yo Dawg", "Jim Fix", 1980, "Penguin", 29.99, "http://amazon.com", 2.99);
Book five = new Ebook ("HB12345678", "Lottsa Books", "Wille Sargent", 2010, "Wherever", 129.99, "http://amazon.com", 12.99);
bookInventory[0] = two;
bookInventory[1] = three;
bookInventory[2] = five;
bookInventory[3] = one;
bookInventory[4] = four;
/* Declare Number Format */
NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.US);
/* Sort Items
bookInventory = sortArray(bookInventory);*/
/* Declare JText Class */
final JTextArea textArea = new JTextArea(10,20);
textArea.setText("");
textArea.setEditable(false);
/* Making Buttons */
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new GridLayout(1, 3));
JButton firstButton = new JButton("First");
buttonPanel.add(firstButton);
firstButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
bookstoreIndex = 0;
prepareDisplay(bookInventory[bookstoreIndex], textArea);
}
});
JButton lastButton = new JButton("Last");
buttonPanel.add(lastButton);
lastButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
bookstoreIndex = (bookInventory.length - 1);
prepareDisplay(bookInventory[bookstoreIndex], textArea);
}
});
JButton prevButton = new JButton("Previous");
buttonPanel.add(prevButton);
prevButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
bookstoreIndex--;
if (bookstoreIndex == bookInventory.length - 1) {
bookstoreIndex=0;
}
prepareDisplay(bookInventory[bookstoreIndex], textArea);
}
});
JButton nextButton = new JButton("Next");
buttonPanel.add(nextButton);
nextButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
bookstoreIndex++;
if (bookstoreIndex == bookInventory.length) {
bookstoreIndex=0;
}
prepareDisplay(bookInventory[bookstoreIndex], textArea);
}
});
/* Total Value */
String totalValue = "Total Value = " + nf.format(calculateInventoryTotal(bookInventory));
JLabel valuePanel = new JLabel(totalValue);
/* Add Logo */
JLabel logoLabel = new JLabel (new ImageIcon("cmdroundlogo600.png"));
JPanel logoPanel = new JPanel();
logoPanel.add(logoLabel);
JPanel centerPanel = new JPanel();
centerPanel.setLayout(new BoxLayout(centerPanel, BoxLayout.Y_AXIS));
centerPanel.add(prepareDisplay(bookInventory[bookstoreIndex], textArea));
/* Assemble the GUI */
JFrame frame = new JFrame();
frame.setLayout(new BorderLayout());
frame.add(logoPanel, BorderLayout.NORTH);
frame.add(buttonPanel, BorderLayout.SOUTH);
frame.add(centerPanel, BorderLayout.CENTER);
frame.add(valuePanel, BorderLayout.LINE_END);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
最佳答案
您在前一个 ActionListener 中检查了错误的边界(顶部边界),如下面的评论所述:
public void actionPerformed(ActionEvent e) {
bookstoreIndex--;
// this checks if the index is **ABOVE** the range of acceptable
if (bookstoreIndex == bookInventory.length - 1) {
bookstoreIndex=0;
}
prepareDisplay(bookInventory[bookstoreIndex], textArea);
}
相反,由于您递减索引,您需要检查它是否低于底部边界,以检查它是否< 0。例如:
public void actionPerformed(ActionEvent e) {
bookstoreIndex--;
// You want to check if the index is **BELOW** the range of acceptable
if (bookstoreIndex < 0) {
bookstoreIndex = bookInventory.length - 1;
}
prepareDisplay(bookInventory[bookstoreIndex], textArea);
}
或者另一种可以与上一个或下一个一起使用的方式:
public void actionPerformed(ActionEvent e) {
bookstoreIndex--; // ++ for the next button's listener
bookstoreIndex += bookInventory.length; // in case it's < 0
bokstoreIndex %= bookInventory.length; // put it in correct range
prepareDisplay(bookInventory[bookstoreIndex], textArea);
}
<小时/>
顺便说一句,您的代码严重过度使用了 static 修饰符,并且在 main 方法中放置了太多代码和责任。我强烈建议您对代码进行 OOP 化,使其更加符合 OOP 且表现良好。
关于java - "Prev"按钮未循环遍历数组,"Next"按钮工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26088381/
我查阅了整个 jQuery 文档,但没有找到任何内容:是否可以搜索当前元素之前具有特定类的元素?我以为这会起作用,但事实并非如此: $(this).prev('.bar'); http://jsfid
如何避免 .prev().prev().prev() 调用?有捷径吗? 最佳答案 您可以将 .prevAll 与 eq 或 :eq 结合使用,因为 prevAll 返回一组从最接近当前元素 [0] 的
目前我正在尝试使用 Node 运行一个非常基本的待办事项列表。设置 package.json 和 server.js 后,我运行了 npm start run,但出现了一个奇怪的错误。 更新:这是基本
我有一个名为 Scores 的表: mysql> select * from Scores; +------+-------+ | Id | Score | +------+-------+ |
我对这段代码有疑问: poss = [6,9,20] for n in range(6,66): if(n%6) == 0 or (n%9) == 0 or (n%20) == 0:
我正在阅读 React 钩子(Hook)的示例。我发现他们写 setCount(count + 1) 但我通常是这样写的 setCount(prev => prev + 1) 有什么区别吗?哪一个更好
如何使用 prev() 选择前一个元素?我希望当我点击icon 1时它会删除span。 html.erb # inside a loop -- notice the loop!. icon 1
我有这个 html 代码: 1 require 'yaml' 2 require 'set' 3 4 module ActiveRecord #:nodoc: 5
如何避免双重释放或损坏 (!prev) 我有这些结构: 空设备,始终有效 static struct mixer null_mixer = { .set_device = null_set_d
I get the following error when running a c program: * Error in `./final': double free or corruption
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: jquery find closest previous sibling with class 下面给出的代
我在一个文件中有这样的代码... $d = new db(); class db { function fetchform() { global $wpdb; $con
我想在点击事件中将类添加到最近的 p: http://jsfiddle.net/d7gFf/2/ 但这无法向 p 元素添加或删除类。点击事件有什么问题。 提前致谢 最佳答案 closest()搜索祖先
我在 jQuery 中使用 prev() 时遇到问题,它没有选择正确的元素。 我的HTML结构如下: ... ... “事件”部分是#contact。我想选择上一节,跳过
首先,我使用名为listrec的结构定义了节点。因此,每个节点包含3个部分:prev(用于存储前一个节点的地址),value(用于存储值)和next(用于存储下一个节点的地址)。 #include
我正在尝试删除以下代码的最后两个中断标记实例: Link stupid font tag Someth
代码: h4 inside anchor This is a sibling paragraph of that anchor which had h4 in it
鉴于这个简单的设置 I'm spoiled I'm spoiled 当我检测到对类“uncle”的点击时,我想获取最近的前一个“.parent”的同级。我应该可以做到 $(
当我使用 $('#btn').prev().text('new string'); 单击按钮时,我成功更改了按钮值但我不知道为什么应该使用 .prev() 根据http://api.jquery.co
我正在尝试使用 jQuery 获取输入值。在我的真实代码中,我有更多的输入和按钮,因此像: .middle() 这样的代码将不起作用!我需要从 btn 向上遍历。 HTML Help Alert
我是一名优秀的程序员,十分优秀!