单击表格行时如何切换另一个选项卡

时间:2014-02-20 13:43:23

标签: java swing netbeans

我的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

1 个答案:

答案 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 TablesHow 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();
            }
        });
    }
}