刷新 JTable 以便显示插入的数据
Refresh JTable so data inserted is shown
我正在做一个项目,我有两个 JFrame
windows。第一帧显示空 table。它下方的按钮将打开第二个框架,其中应输入数据。我的问题是,当我在第二帧中单击 'ok' 时,第一帧中的 table 不会显示插入的数据。
我尝试了 jframe.revalidate();
和 jframe.repaint()
以及 table.revalidate();
和 table.repaint();
但它不起作用。
此外,我正在使用 DefaultTableModel
,所以我也尝试了 model.fireTableDataChanged();
,但仍然没有。
//first jframe
public NewJFrame() {
initComponents();
setLocationRelativeTo(null);
viewTable();
}
Object[] newRow;
public NewJFrame(Object[] newRow){
initComponents();
setLocationRelativeTo(null);
this.newRow = newRow;
addNewRow();
}
public void viewTable(){
table.setFont(new Font("Segoe UI", Font.PLAIN, 16));
JTableHeader tablehead1 = table.getTableHeader();
tablehead1.setFont(new Font("Segoe UI", Font.PLAIN, 16));
table.setRowHeight(30);
TableColumnModel columnModel = table.getColumnModel();
columnModel.getColumn(0).setPreferredWidth(400); //Name
columnModel.getColumn(1).setPreferredWidth(100); //Age
}
public void addNewRow(){
DefaultTableModel model = (DefaultTableModel) table.getModel();
model.addRow(newRow);
System.out.println(newRow[0].toString() + newRow[1].toString()); //so i would know data is present
}
private void addActionPerformed(java.awt.event.ActionEvent evt) {
form f = new form();
f.setVisible(true);
}
//here's the second jframe
public form() {
initComponents();
setLocationRelativeTo(null);
}
private void OKActionPerformed(java.awt.event.ActionEvent evt) {
Object[] input = { name.getText(), age.getText() };
if(input.equals("")){
System.out.println("empty");
} else {
NewJFrame n = new NewJFrame(input);
n.revalidate();
n.repaint();
this.setVisible(false);
}
您的问题是您将输入数据传递给 new NewJFrame 而不是现有的。解决方案是不这样做,将其传递给现有的 和当前显示的 NewJFrame 实例。如何?取决于你的代码。请注意,第二个 "JFrame" 应该是 JDialog,可能是 modal JDialog.
我正在做一个项目,我有两个 JFrame
windows。第一帧显示空 table。它下方的按钮将打开第二个框架,其中应输入数据。我的问题是,当我在第二帧中单击 'ok' 时,第一帧中的 table 不会显示插入的数据。
我尝试了 jframe.revalidate();
和 jframe.repaint()
以及 table.revalidate();
和 table.repaint();
但它不起作用。
此外,我正在使用 DefaultTableModel
,所以我也尝试了 model.fireTableDataChanged();
,但仍然没有。
//first jframe
public NewJFrame() {
initComponents();
setLocationRelativeTo(null);
viewTable();
}
Object[] newRow;
public NewJFrame(Object[] newRow){
initComponents();
setLocationRelativeTo(null);
this.newRow = newRow;
addNewRow();
}
public void viewTable(){
table.setFont(new Font("Segoe UI", Font.PLAIN, 16));
JTableHeader tablehead1 = table.getTableHeader();
tablehead1.setFont(new Font("Segoe UI", Font.PLAIN, 16));
table.setRowHeight(30);
TableColumnModel columnModel = table.getColumnModel();
columnModel.getColumn(0).setPreferredWidth(400); //Name
columnModel.getColumn(1).setPreferredWidth(100); //Age
}
public void addNewRow(){
DefaultTableModel model = (DefaultTableModel) table.getModel();
model.addRow(newRow);
System.out.println(newRow[0].toString() + newRow[1].toString()); //so i would know data is present
}
private void addActionPerformed(java.awt.event.ActionEvent evt) {
form f = new form();
f.setVisible(true);
}
//here's the second jframe
public form() {
initComponents();
setLocationRelativeTo(null);
}
private void OKActionPerformed(java.awt.event.ActionEvent evt) {
Object[] input = { name.getText(), age.getText() };
if(input.equals("")){
System.out.println("empty");
} else {
NewJFrame n = new NewJFrame(input);
n.revalidate();
n.repaint();
this.setVisible(false);
}
您的问题是您将输入数据传递给 new NewJFrame 而不是现有的。解决方案是不这样做,将其传递给现有的 和当前显示的 NewJFrame 实例。如何?取决于你的代码。请注意,第二个 "JFrame" 应该是 JDialog,可能是 modal JDialog.