- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
它显示错误,但我不知道为什么。
单击搜索按钮更新 JTable 值。然后在选择一行后,它将所选行的最后一列的值打印到控制台。但是,如果我再次单击搜索按钮,则会出现错误。问题怎么解决?
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTable;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.AbstractTableModel;
public class Test extends JFrame {
Container c;
public JButton search;
public JTable table;
public Test() {
c= getContentPane();
c.setLayout(new BorderLayout());
table = new JTable(new MyTableModel());
table.setPreferredScrollableViewportSize(new Dimension(500, 70));
table.setFillsViewportHeight(true);
table.setAutoCreateRowSorter(true);
JScrollPane scrollPane = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
search = new JButton("Search");
c.add(scrollPane, BorderLayout.WEST);
c.add(search, BorderLayout.EAST);
JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, scrollPane, search);
splitPane.setOneTouchExpandable(true);
splitPane.setResizeWeight(0.7);
add(splitPane, BorderLayout.CENTER);
ListenerSearch listenersearch = new ListenerSearch();
search.addActionListener(listenersearch);
}
public class ListenerSearch implements ActionListener{
public void actionPerformed(ActionEvent e){
try{
String[] columnNames = {"A","B","C","D","E"};
Object[][] data = {
{"Kathy", "Smith",
"Snowboarding", new Integer(5), new Boolean(true)},
{"John", "Doe",
"Rowing", new Integer(3), new Boolean(true)},
{"Sue", "Black",
"Knitting", new Integer(2), new Boolean(false)},
{"Jane", "White",
"Speed reading", new Integer(20), new Boolean(true)},
{"Joe", "Brown",
"Pool", new Integer(10), new Boolean(false)}
};
MyTableModel changedtable = new MyTableModel();
changedtable.setString(columnNames);
changedtable.setObject(data);
table.setModel(changedtable);
table.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
public void valueChanged(ListSelectionEvent event) {
System.out.println(table.getValueAt(table.getSelectedRow(), 4).toString());
}
});
} catch(Exception ex) {
ex.printStackTrace();
}
}
}
public static class MyTableModel extends AbstractTableModel {
public String[] columnNames = {"First Name",
"Last Name",
"Sport",
"# of Years",
"Vegetarian"};
public void setString(String[] columnNameshelfer){
columnNames=columnNameshelfer;
}
public Object[][] data = {
{"Kathy", "Smith",
"Snowboarding", new Integer(5), new Boolean(true)},
{"John", "Doe",
"Rowing", new Integer(3), new Boolean(true)},
{"Sue", "Black",
"Knitting", new Integer(2), new Boolean(false)},
{"Jane", "White",
"Speed reading", new Integer(20), new Boolean(true)},
{"Joe", "Brown",
"Pool", new Integer(10), new Boolean(false)},
{"Kathy", "Smith",
"Snowboarding", new Integer(5), new Boolean(true)},
{"John", "Doe",
"Rowing", new Integer(3), new Boolean(true)},
{"Sue", "Black",
"Knitting", new Integer(2), new Boolean(false)},
{"Jane", "White",
"Speed reading", new Integer(20), new Boolean(true)},
{"Joe", "Brown",
"Pool", new Integer(10), new Boolean(false)}
};
public void setObject(Object[][] datahelfer){
data=datahelfer;
}
public int getColumnCount() {
return columnNames.length;
}
public int getRowCount() {
return data.length;
}
public String getColumnName(int col) {
return columnNames[col];
}
public Object getValueAt(int row, int col) {
return data[row][col];
}
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
public boolean isCellEditable(int row, int col) {
if (col < 1) {
return false;
} else {
return true;
}
}
public void setValueAt(Object value, int row, int col) {
data[row][col] = value;
}
}
public static void main(String[] args) throws Exception {
Test window = new Test();
window.setSize(800,400);
window.setVisible(true);
window.setTitle("Test");
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
错误信息:
java.lang.IndexOutOfBoundsException: Invalid index
at javax.swing.DefaultRowSorter.convertRowIndexToModel(DefaultRowSorter.java:514)
at javax.swing.JTable.convertRowIndexToModel(JTable.java:2641)
at javax.swing.JTable.getValueAt(JTable.java:2716)
at Test$ListenerSearch$1.valueChanged(Test.java:74)
at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:184)
at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:164)
at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:211)
at javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:405)
at javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:415)
at javax.swing.DefaultListSelectionModel.removeSelectionIntervalImpl(DefaultListSelectionModel.java:576)
at javax.swing.DefaultListSelectionModel.clearSelection(DefaultListSelectionModel.java:420)
at javax.swing.JTable.clearSelection(JTable.java:2116)
at javax.swing.JTable.clearSelectionAndLeadAnchor(JTable.java:2124)
at javax.swing.JTable.tableChanged(JTable.java:4369)
at javax.swing.JTable.setModel(JTable.java:3687)
at Test$ListenerSearch.actionPerformed(Test.java:70)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
最佳答案
问题出在这行代码
System.out.println(table.getValueAt(table.getSelectedRow(), 4).toString());
当一行未被选中时 table.getSelectedRow()
等于 -1
。所以当你调用
table.getValueAt(table.getSelectedRow(), 4).toString()
你得到错误是因为行 -1
和列 4 没有单元格
在像这样获取单元格值之前修复此检查 getSelectedRow()
值
if(table.getSelectedRow()>=0){ // check if a row is selected
System.out.println(table.getValueAt(table.getSelectedRow(), 4).toString());
}
注意:这将修复您的错误。但我不知道您的程序的逻辑是什么。每次单击搜索按钮时您都会更改模型。这对我来说看起来很糟糕,但我不能肯定地说,直到我知道你的程序应该做什么。
关于java - 单击按钮、ListSelectionListener 和 JTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32146646/
我有一个普通的 JTable 和一个 ListSelectionListener。我想它应该可以正常工作,但有一个问题: 我点击表格行 事件触发(方法 valueChanged 启动) 在 value
这是我的代码。当您从左向右选择时出现问题.. import javax.swing.*; import javax.swing.event.*; pub
对于学校项目,我必须在 JList 上使用 ListSelectionListener(LSL)。我知道 LSL 会响应鼠标单击和鼠标释放。但对于该项目,我必须让它响应双击。有没有办法让 LSL 对此
我想要一个 ListSelectionListener 事件来更改 JPanel。我知道它被正确触发,因为打印语句正在工作,但是面板根本没有改变。 DefaultListModel leftList
目前正在开发 Swing 应用程序,我需要使用 ListSelectionListener 来获取 JList 中的当前选定值。我知道如何将它添加到 JList 本身,但是无论我实现什么,编译器都找不
我只是想看看哪个元素被选中,并根据索引更改框架上的其他标签和文本域。我的代码如下: list = new JList(listModel); list.setSelectionMode
我有带有 JList 和 ListSelectionListener 的 Java 类: final JList myList = new JList(); // ... myList.addList
class MyListListener implements ListSelectionListener { public void valueChanged (ListSelectio
例如,我有一个名为 across_list 的 JList,其中包含项目列表,现在我向该 JList 添加一个 ListSelectionListener 考虑这些代码行: class AcrossL
我有 2 个 jlist 和 1 个 jbutton。我想要做的是,当用户选择一个 jlist 中的某些项目,然后单击按钮,一些元素会根据选择出现在另一个 jlist 上。我的问题是 && 条件,因为
我有包含一些行的 Jtable。如果我选择某些行,则每次都会调用 addListSelectionListener(对于每个行选择)。有什么方法可以避免这些多次调用,因为如果我选择 10000 行,它
我使用 ListSelectionListener 来监听 JTable 的选择,以执行与表中所选项目相关的其他任务。但是为什么下面的代码在一开始的一个选择中执行了两次,而在更新该表之后执行了多次?
我有一个包含联系人姓名的 JTable。从该表中选择一行后,第二个表将填充该人的主要电话号码和电子邮件地址。目前,我正在使用自定义 MouseListener 来检查人们何时单击第一个表格中的一行,但
我有一个表,其中包含我输入的所有学生详细信息。它位于我屏幕的左侧。在右侧,我有另一个带有文本字段的面板,它根据表中的选择显示学生详细信息。我们也可以修改这些细节。为了存储修改后的详细信息,我添加了一个
我在 JSplitPane 中有 2 个 DefaultListModel。 JSplitPane 的左侧有 RssChannel 标题。当选择 RssChannel 标题时,RssItem 标题应该
我在我编写的lil应用程序中随机出现了NullPointerException。基本上,它应显示一个数字列表,当选择其中一个数字时,一些详细信息应显示在窗口的其他部分。 当单击按钮添加新数据集时,会打
这里是第一个问题,希望我做得正确。 下面是我的问题的一个最小示例,我很快就提出了代表我的项目的示例。我为包含一些对象的 JList 创建了一个自定义渲染器(在示例中我使用了字符串来进行说明)。我的问题
我编写了一些在 JLabel 上设置图像的代码。 Image 的路径是通过 JList 上所选项目的 getSelectedValue() 方法获取的。 当用户从 JComboBox(即 typeCh
我最近一直在努力解决一个让我抓狂的 Java 问题。我一直在尝试将 Controller 中的 ListSelectionListener 添加到 View 中的 JList,但是当我成功地将监听器附
我有一个家庭作业,我正在构建一个 GUI JPane,它包含其他 JPanes 以允许显示多个对象。我的一位听众遇到编译错误,需要一些帮助来解决这个问题。让我先说一下我们不被允许使用 IDE。 错误是
我是一名优秀的程序员,十分优秀!