Java JTable.getColumnName在.setHeaderValue之后未更新

Java JTable.getColumnName在.setHeaderValue之后未更新,java,swing,netbeans,jtable,jtableheader,Java,Swing,Netbeans,Jtable,Jtableheader,我对Java相当陌生,有一个基本问题。我一直试图在互联网上找到答案,但我仍然不明白,一旦我更改了新的列名,如何检索它们 我使用的是Netbeans,代码如下: int columnNum = 2 jTable1.getTableHeader().getColumnModel().getColum(columnNum).setHeaderValue("Test"); repaint(); System.out.println(jTable1.getColumnName(columnNum));

我对Java相当陌生,有一个基本问题。我一直试图在互联网上找到答案,但我仍然不明白,一旦我更改了新的列名,如何检索它们

我使用的是Netbeans,代码如下:

int columnNum = 2

jTable1.getTableHeader().getColumnModel().getColum(columnNum).setHeaderValue("Test");
repaint();

System.out.println(jTable1.getColumnName(columnNum));
我的结果将不会作为测试打印,但我将具有以前存在的旧值。我知道我应该使用FireTableStructureChanged,但我不知道如何在Netbeans中使用它。如果是这样的话,你能给我解释一下该怎么办吗

非常感谢和抱歉,这可能会给大家带来麻烦

编辑

这里有一个例子。表单正在更新,这样就可以了,但是获取列名称时的内部值不会更新:

形像

代码


更改headerValue后,需要重新绘制JTableHeader:

编辑:更改操作执行方式如下:

String remove = "Title 1";
for(int x = 0; x < t.getColumnCount(); x++) {
  if(jTable1.getColumnName(x).equals(remove)) {
  jTable1.getTableHeader().getColumnModel().getColumn(x).setHeaderValue("Test");
  jTable1t.getTableHeader().repaint();
  System.out.println(jTable1.getColumnModel().getColumn(x).getHeaderValue());
 }
}

我找到了解决办法。它可能并不漂亮,但基本上我使用ArrayList在程序中创建了一个虚拟表。当我更改其中一列时,我会用新值替换数组的值。获取新值时,我会在数组中查找它

我相信有更好的办法,但它解决了我的问题


非常感谢大家的帮助。

使用JXTable-它的JXTableHeader会侦听列属性的更改hanks@kleopatra,但如果可能的话,我更愿意使用jTable。很抱歉,这不起作用。尝试添加System.out.printlnjTable1.getColumnName0;你会注意到你仍然得到上一张表。你不需要重新油漆,但一切都取决于底层模型…,没有SSCCE/MCVEThanks@mKorbel,这个问题是无法回答的。我添加了一个图像并提供了一些代码,希望能对您有所帮助。@Michael展示了您的TableModel实现和JTable的创建,但没有说明这一点。@mKorbel您是对的,但我更喜欢使用重绘来避免人工制品。听起来很可疑。。即使它似乎解决了您的问题,但很可能没有:您甚至没有找到问题的真正原因,无论是在您的代码中还是在您的预期中,因此您不可能解决真正的问题;-你所看到的一切纯属巧合。。。
private void initComponents() {

    jPanel1 = new javax.swing.JPanel();
    jButton1 = new javax.swing.JButton();
    jScrollPane1 = new javax.swing.JScrollPane();
    jTable1 = new javax.swing.JTable();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    jButton1.setText("jButton1");
    jButton1.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton1ActionPerformed(evt);
        }
    });

    jTable1.setModel(new javax.swing.table.DefaultTableModel(
        new Object [][] {
            {null, null, null, null},
            {null, null, null, null},
            {null, null, null, null},
            {null, null, null, null}
        },
        new String [] {
            "Title 1", "Title 2", "Title 3", "Title 4"
        }
    ));
    jScrollPane1.setViewportView(jTable1);

    javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
    jPanel1.setLayout(jPanel1Layout);
    jPanel1Layout.setHorizontalGroup(
        jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(jPanel1Layout.createSequentialGroup()
            .addGap(153, 153, 153)
            .addComponent(jButton1)
            .addContainerGap(174, Short.MAX_VALUE))
        .addGroup(jPanel1Layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
            .addContainerGap())
    );
    jPanel1Layout.setVerticalGroup(
        jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(jPanel1Layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(jButton1)
            .addGap(18, 18, 18)
            .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 139, Short.MAX_VALUE)
            .addContainerGap())
    );

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
    );

    pack();
}
table.getColumnModel().getColumn(0).setHeaderValue("Test");
table.getTableHeader().repaint();
String remove = "Title 1";
for(int x = 0; x < t.getColumnCount(); x++) {
  if(jTable1.getColumnName(x).equals(remove)) {
  jTable1.getTableHeader().getColumnModel().getColumn(x).setHeaderValue("Test");
  jTable1t.getTableHeader().repaint();
  System.out.println(jTable1.getColumnModel().getColumn(x).getHeaderValue());
 }
}