Java 为带有TableModel的JTable创建用于JTableHeader的MouseeEvent

Java 为带有TableModel的JTable创建用于JTableHeader的MouseeEvent,java,swing,jtable,Java,Swing,Jtable,我想拥有以下功能:通过单击列的标题,我可以选择列并隐藏其他列。同时,我想显示所选列的语义缩放信息 现在,我只是将鼠标侦听器注册到所选标题,但出现以下异常: [相关例外信息] Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 50, Size: 50 at java.util.ArrayList.rangeCheck(ArrayList.java:604) at java.util.

我想拥有以下功能:通过单击列的标题,我可以选择列并隐藏其他列。同时,我想显示所选列的语义缩放信息

现在,我只是将鼠标侦听器注册到所选标题,但出现以下异常:

[相关例外信息]

Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 50, Size: 50
at java.util.ArrayList.rangeCheck(ArrayList.java:604)
at java.util.ArrayList.get(ArrayList.java:382)
at TableModelSwitch.getValueAt(Unknown Source)
atjavax.swing.table.TableRowSorter$TableRowSorterModelWrapper.getValueAt(TableRowSorter.java:269)
at javax.swing.table.TableRowSorter$TableRowSorterModelWrapper.getStringValueAt(TableRowSorter.java:285)
at javax.swing.DefaultRowSorter.compare(DefaultRowSorter.java:952)
at javax.swing.DefaultRowSorter.access$100(DefaultRowSorter.java:112)
at javax.swing.DefaultRowSorter$Row.compareTo(DefaultRowSorter.java:1376)
at javax.swing.DefaultRowSorter$Row.compareTo(DefaultRowSorter.java:1366)
我想知道为什么JTable中的点击事件会与TableModel类中的getValueAt方法相关。对于所有为标题单击添加鼠标侦听器的教学示例,也没有人提到这一部分。有人能帮我解决这个问题吗?寄存器部件代码如下所示:

  public MyJTable() {
    super();
    this.addMouseListener(new MouseAdapter() {
       public void mouseClicked(MouseEvent e) {
           JTableHeader header = getTableHeader();
           if (header.equals(e.getSource())){
                if (e.getClickCount()==2){
                   int index = convertColumnIndexToModel(columnAtPoint(e.getPoint()));
                   if (index >= 0) {
                      System.out.println("Clicked on column " + index);

                    }
                } 
            } else { //clicking event when clicking any cell of this Table
      }
    });
  public JTableSummary() {
    super();
    setAutoCreateRowSorter(false);
    JTableHeader summaryHeader = this.getTableHeader();
    summaryHeader.setReorderingAllowed(false);
    summaryHeader.addMouseListener(new MouseAdapter(){
           @Override
        public void mouseClicked(MouseEvent e) {
            if (e.getClickCount()==2){
                   int index = convertColumnIndexToModel(columnAtPoint(e.getPoint()));
                   if (index >= 0) {
                      System.out.println("Clicked on column " + index);
                    }
                //} 
            }
    });
我想可能是因为header==null,所以没有机会进入第一个if条件。然而,检查后,标题=null,我在myAbstractTableModel中重写了getColumnName。所以现在我的想法已经没有了

[新编辑]

现在我尝试为标头添加侦听器,但错误是相同的。我发现,当我双击标题时,异常情况与上面相同,并且在编码时显示所选标题的信息。我想例外是因为表的标题有排序侦听器。我试图设置AutoCreateRowsorterFalse;以及summaryHeader.setReorderingAllowedfalse;但它仍然不起作用。有关的新守则如下:

  public MyJTable() {
    super();
    this.addMouseListener(new MouseAdapter() {
       public void mouseClicked(MouseEvent e) {
           JTableHeader header = getTableHeader();
           if (header.equals(e.getSource())){
                if (e.getClickCount()==2){
                   int index = convertColumnIndexToModel(columnAtPoint(e.getPoint()));
                   if (index >= 0) {
                      System.out.println("Clicked on column " + index);

                    }
                } 
            } else { //clicking event when clicking any cell of this Table
      }
    });
  public JTableSummary() {
    super();
    setAutoCreateRowSorter(false);
    JTableHeader summaryHeader = this.getTableHeader();
    summaryHeader.setReorderingAllowed(false);
    summaryHeader.addMouseListener(new MouseAdapter(){
           @Override
        public void mouseClicked(MouseEvent e) {
            if (e.getClickCount()==2){
                   int index = convertColumnIndexToModel(columnAtPoint(e.getPoint()));
                   if (index >= 0) {
                      System.out.println("Clicked on column " + index);
                    }
                //} 
            }
    });
我想当前的问题是如何有效地禁用标题排序侦听器我可以看到排序图标-当我单击标题时,一个三角形向上/向下出现,并使我自己的侦听器可用


提前感谢您的帮助

Netbeans不是问题所在,我认为您没有在编译程序时启用调试信息。进入项目属性并更改编译器属性。您还将鼠标侦听器附加到表本身,而不是表头。这意味着表格将要重新呈现表格单元格,使其突出显示,以显示如何向标题添加鼠标侦听器;被接受的答案提供了宝贵的注意事项。@谢谢你的建议!现在我找到了问题的新原因。你能看一下新的编辑吗?