我的窗口基本上是什么样的
我一直试图编写一种方法来制作动态jtable,其中列标题是Y,Xsub1,Xsub2,Xsub3,...,Xsub30。表的列数和行数由特定的文本字段确定,要求每个文本字段的所需数量,其中我将代码限制为仅30列。 我能够使用长代码在Xsub30的范围内完成它,但它说编码中存在错误。它只能在没有出现错误的情况下上升到Xsub10,即使Xsub1到Xsub30的代码是相似的。我通过网络搜索以寻找一种方法来使用"对于"或者"如果",那么它会更短,但到目前为止我的代码仍有错误。 顺便说一下,变量都是初始化的。我正在使用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);
}
答案 0 :(得分:3)
正如@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);
}
}