我对Java很新,并且有一个基本问题。我一直试图在互联网上找到答案,但我仍然不明白一旦我更改了它们,我将如何检索新的列名。
我正在使用Netbeans并拥有以下代码:
int columnNum = 2
jTable1.getTableHeader().getColumnModel().getColum(columnNum).setHeaderValue("Test");
repaint();
System.out.println(jTable1.getColumnName(columnNum));
我的结果不会打印为测试,但我将获得以前存在的旧值。我知道我应该使用一些名为fireTableStrucutreChanged()
的东西,但我不确定如何在Netbeans中这样做。如果是这个想法,请你解释一下该怎么做。
非常感谢并抱歉这可能会给大家带来麻烦。
修改
这是一个例子。表单正在更新,因此很好,但内部值(当获取列的名称不更新时):
表格 - 图像
http://s13.postimg.org/t8xiadfl3/test.jpg
代码的
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
String remove = "Title 1";
for(int x = 0; x < jTable1.getColumnCount(); x++) {
if(jTable1.getColumnName(x).equals(remove)) {
jTable1.getTableHeader().getColumnModel().getColumn(x).setHeaderValue("Test");
repaint();
System.out.println(jTable1.getColumnName(x));
}
}
}
编辑 - 为表单添加了创建代码。
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();
}
答案 0 :(得分:0)
更改headerValue后,您需要重新绘制JTableHeader
:
table.getColumnModel().getColumn(0).setHeaderValue("Test");
table.getTableHeader().repaint();
编辑:改变actionPerformed()
,如下:
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());
}
}
答案 1 :(得分:0)
我找到了解决方案。它可能不是很漂亮,但基本上我使用ArrayList在程序中创建一个虚拟表。当我改变其中一列时,我会用新值替换Array的值。在获取新值时,我会在Array中找到它。
我确信有更好的方法,但它解决了我的问题。
非常感谢大家的帮助。