我想要的是,用户输入文本字段,一旦按下确定,我希望将其添加到jtable,他们添加另一个选项,我希望将其添加到jtable等等。一旦他们添加了它我想获得Jtable的值并执行它说打印出来但是他们添加它的顺序。
我设计了一个组合框,3个文本字段,一个标签,点击后将数据添加到JTable。以下是我目前的代码。
JComboBox comboBox1 = new JComboBox();
comboBox1.setModel(new DefaultComboBoxModel(new String[] { "NONE","A","B","C","D" }));
comboBox1.setBounds(40, 20, 200, 40);
contentPane.add(comboBox1);
JTextField time = new JTextField();
time.setBounds(216, 135, 45, 30);
contentPane.add(time);
JTextField speed1 = new JTextField();
speed1.setBounds(273, 135, 45, 30);
contentPane.add(speed1);
JTextField speed2 = new JTextField();
speed2.setBounds(328, 135, 45, 30);
contentPane.add(speed2);
JLabel label1 = new JLabel("Add this to table");
label1.setBounds(310, 200, 100, 20);
contentPane.add(label1);
JTable table_2 = new JTable();
table_2.setModel(new DefaultTableModel(
new Object[][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
},
new String[] {
"New column", "New column", "New column", "New column"
}
));
table_2.setBounds(20, 200, 360, 100);
contentPane.add(table_2);
用户可以按任何顺序向Jtable添加值,例如用户从组合框中选择A,在场时间中选择2,在场速1中选择10,在场速2中选择10,然后他们添加说B和信息,以及C,D和B再次或任何其他,或者他们只选择1个选项以及执行该选项。
所以说,用户选择或键入B,2,5,6,然后按下添加到表格,我想要添加,他们可以添加更多,让我们说他们添加2更多不同的变化。如何将它们存储在JTable中,然后如果我想按照它们的顺序将它们打印出来,我该怎么做。
感谢。
答案 0 :(得分:2)
您最初不需要指定一堆空单元格/行。只是我们这个模型的构造函数
DefaultTableModel(Object[] columnNames, int rowCount)
构造一个DefaultTableModel
,其列数与columnNames中的元素和null对象值的rowCount一样多。
String[] colNames = {"New column", "New column", "New column", "New column"};
DefaultTableModel model = new DefaultTableModel(colNames, 0);
...
table.setModel(model);
然后您可以使用此方法添加行
public void addRow(Object[] rowData)
在模型的末尾添加一行。除非指定了rowData,否则新行将包含空值。将生成正在添加的行的通知。
类似于
String cBoxSelection = (String)comboBox1.getSelectedItem();
String speed1String = speed1.getText();
String speed2String = speed2.getText();
String timeString = time.getText();
String[] row = {cBoxSelection, speed1String, speed2String, timeString};
model.addRow(row);
如果您想遍历模型以打印项目,只需使用这些方法
getColumnCount()
返回此数据表中的列数。
getRowCount()
返回此数据表中的行数。
getValueAt(int row, int column)
返回行和列的单元格的属性值 所以你可以做这样的事情
for (int i = 0; i < model.getRowCount(); i++ ){
for (int j = 0; j < model.getColumnCount(); j++) {
System.out.printf("%10s", model.getValueAt(i, j));
}
System.out.println();
}
旁注
如@HovercraftFullOfEels所述,请勿使用null布局。看看Laying out Components Within a Container。布局管理器将使您的布局更灵活,适合不同的外观并感受机器
您应该将JTable
包裹在JScrollPane
中。
JScrollPane scroll = new JScrollPane(table);
contentPane.add(scroll);
您应该使用此构造函数
指定JTextFields
的大小
JTextField(int columns)
其中columns
是字段的字符长度。
“如何在需要时检索这些值”
您需要使它们成为类成员变量。现在他们看起来像是在构造函数中本地化了。这是我的班级成员的意思
public class MyClass {
private JTextField time;
private JTextField speed1;
public MyClass() {
time = new JTextField(10);
speed1 = new JtextField(10);
}
}
不能在构造函数的外部访问它们,因为它们现在具有全局范围。目前,它们在构造函数中只有 local 范围。