我的窗户基本上是什么样子
我一直在尝试编写一种方法来制作动态jtable,其中列标题为Y,Xsub1,Xsub2,Xsub3,...,Xsub30。该表的列数和行数由特定的文本字段确定,每个文本字段要求提供所需的数字,在此我编写了将代码限制为仅30列的代码。
我可以使用长代码做到Xsub30的程度,但是它表示编码中有错误。即使Xsub1到Xsub30的代码相似,它也只能上升到Xsub10,而不会出现错误。我在网上搜索了一种使用“ for”或“ if”对其进行编码的方法,以便短一些,但到目前为止我的代码仍然有错误。
顺便说一下,所有变量都已初始化。我正在使用Netbeans IDE 8.0.2。
请帮我解决这个问题。
rows = Integer.parseInt(rowsField.getText() ) ;
col = Integer.parseInt(colField.getText() ) ;
Object[][] rowArray = new Object[rows][col] ;
valuesTable = new javax.swing.JTable();
valuesTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF );
if (col <1)
{
JOptionPane.showMessageDialog(this, "Sorry, that input is invalid");
}
if (col >30)
{
JOptionPane.showMessageDialog(this, "Sorry, that input is out of bounds");
}
if (rows <1)
{
JOptionPane.showMessageDialog(this, "Sorry, that input is invalid");
}
for (int x = 0; x < columnNames.length; x++)
{valuesTable.getColumn(x).setHeaderValue(columnNames[x]);}
if (col>=1 && col<=30)
{
valuesTable.setModel(new javax.swing.table.DefaultTableModel(
rowArray, columnNames
)
{
Class[] types = new Class[]{
java.lang.Double.class, java.lang.Double.class
};
public Class getColumnClass(int columnIndex) {
return types[columnIndex];
}
});
jScrollPane1.setViewportView(valuesTable);
}
最佳答案
正如@mKorbel所说,您需要使用TableColumnModel
:
valuesTable.getColumnModel().getColumn(0).setHeaderValue("Y");
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
public class DynamicColumnTest {
private final JTable valuesTable = new JTable();
public JComponent makeUI() {
valuesTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
JPanel p = new JPanel(new BorderLayout());
p.add(new JScrollPane(valuesTable));
p.add(new JButton(new AbstractAction("Apply col+1") {
private int col = 1;
@Override public void actionPerformed(ActionEvent e) {
int rows = 5; //Integer.parseInt(rowsField.getText());
col = 1 + col % 30; //Integer.parseInt(colField.getText());
Object[][] rowArray = new Object[rows][col];
Object[] columnNames = Collections.nCopies(col, "Xsub").toArray();
valuesTable.setModel(new DefaultTableModel(rowArray, columnNames));
valuesTable.getColumnModel().getColumn(0).setHeaderValue("Y");
for (int x = 1; x < columnNames.length; x++) {
//XXX: IllegalArgumentException: Identifier not found
//XXX: valuesTable.getColumn(x).setHeaderValue(columnNames[x]);
String s = String.format("%s%d", columnNames[x], x);
valuesTable.getColumnModel().getColumn(x).setHeaderValue(s);
}
}
}), BorderLayout.NORTH);
return p;
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override public void run() {
createAndShowGUI();
}
});
}
public static void createAndShowGUI() {
JFrame f = new JFrame();
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.getContentPane().add(new DynamicColumnTest().makeUI());
f.setSize(320, 240);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}