我的java swing界面中有两个标签。一个选项卡有客户详细信息表。当我单击表格的一行时,我想切换到下一个其他选项卡。请帮我。我试过这段代码。
private void jTable2MouseClicked(java.awt.event.MouseEvent evt) {
int i = jtp.getSelectedIndex();
jtp.setSelectedIndex(i == jtp.getTabCount() - 1 ? 0 : i + 1);
}
我有例外。
Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 0, Tab count: 0
答案 0 :(得分:0)
“当我点击表格的一行时,我想切换到下一个其他标签。”
您要做的是在表格的选择模型中添加ListSelectionListener
。选择行后,将触发ListSelectionEvent
。您可以将选项卡更改为您希望从中更改的索引。
table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
if (e.getValueIsAdjusting()) {
tabs.setSelectedIndex(tabs.indexOfTab("Other Panel"));
}
}
});
请参阅How to Use Tables和How to Write ListSelectionListeners了解详情。
完整示例
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class TableSelection {
public TableSelection() {
JTabbedPane tabPane = createTabPane();
JFrame frame = new JFrame("Frame");
frame.setContentPane(tabPane);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
private JTabbedPane createTabPane() {
JTabbedPane pane = new JTabbedPane();
JTable table = createTable(pane);
pane.add(new JScrollPane(table), "Table Tab");
JPanel panel1 = new JPanel();
panel1.setBackground(Color.BLUE);
pane.add(panel1, "Other Panel");
return pane;
}
private JTable createTable(final JTabbedPane tabs) {
String[][] data = {{"HELLO", "WORLD"}, {"HELLO", "WORLD"}};
String[] cols = {"Hello", "World"};
JTable table = new JTable(data, cols);
table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
if (e.getValueIsAdjusting()) {
tabs.setSelectedIndex(tabs.indexOfTab("Other Panel"));
}
}
});
return table;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new TableSelection();
}
});
}
}