Java:GUI – JButton打开新的JPanel并读取JTextFields

我的问题是让我的Main类和Journal类连接在一起,在Main类中用户将输入两个变量并单击按钮来创建表,在Journal类中它将读取两个变量。

我使用netbeans来创建Main类和我自己创建表类的方法请帮忙! 谢谢! 当我右键单击>事件>操作>执行的操作时,这是Main类Netbeans告诉我编辑的部分

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: } 

和我的Journal类,我试过让它读取JTextField 1和2,但我不知道如何组合它们。

 import java.awt.*; import java.util.*; import javax.swing.*; import javax.swing.table.*; public class Journal extends JPanel { public Journal() { String colN1 = "Date"; String colN2 = "Student"; int a = Integer.parseInt(newJournal.jTextField1.getText()); int b = Integer.parseInt(newJournal.jTextField2.getText()); int c = a*2/b; int col = c*2; String[] columnNames = new String[col]; for(int colF = 0; colF < col; colF++) { if(colF%2 == 0) { columnNames[colF] = colN1; } else { columnNames[colF] = colN2; } } int row = b; int d = 1; int s = 1; int x = 0; Integer f = new Integer(1); Object[][] data = new Object[row][col]; for (int col1 = 0; col1 < data[0].length; col1++) { for (int row1 = 0; row1 b) { d = 1; } else if(s > a || x > 2) { s = 1; x++; } else if (row1 > row) { row1 = 0; } else if(col1%2 == 0) { data[row1][col1]= "Day " + d; d++; } else { data[row1][col1]= s; s++; } } } for (int col2 = 0; col2 < data[0].length; col2++) { for (int row2 = 0; row2 a || x > 2) { s = 1; x++; } else if(s!=data[row2][col2]&&col2%2!=0) { data[row2][col2] = s; s++; } } } for (int row3 = 0; row3<data.length; row3++) { for (int col3 = 0; col3  a || x > 2) { s = 1; x++; } else if(s==data[rowA][cols] && s == data[rowS][cols]) { cols=cols+2; } else if (s == data[rows][colA] && s == data [rows][colS]) { rows++; } else if(s!=data[row3][col3]&&col3%2!=0) { data[row3][col3] = s; s++; } } } JTable table = new JTable(data, columnNames); table.setPreferredScrollableViewportSize(table.getPreferredSize()); JScrollPane scrollPane = new JScrollPane(table); add(scrollPane); } private static void gui() { JFrame gui = new JFrame(); gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); gui.setTitle("Journal List"); gui.setSize(700,200); gui.setLocationRelativeTo(null); gui.setVisible(true); gui.add(new Journal()); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { gui(); } }); } } 

目前,您的JTableJournal构造函数中是本地作用域的,因此无法从其他任何位置访问它。 你想要做的是将它声明为一个类成员,并为它有一个getter

  public class Journal extends JPanel { private JTable table; public Journal() { table = new JTable(...); } public JTable getTable() { return table; } } 

现在可以使用getTable()Main类访问和检索table

此外,您还希望使用TableModel动态更新数据。 Yo可以使用一个简单的,已经实现的DefaultTableModel 。 您想将此模型设置为JTable 。 像这样的东西

  public Journal() { ... DefaultTableModel model = new DefaultTableModel(data, columns); table = new JTable(model); } 

因此,您已为Main类设置了所有内容。 在你的actionPerfomed你可以做这样的事情

 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { String data1 = textField1.getText(); String data2 = textField2.getText(); JTable table = journal.getTable(); DefaultTableMode model = (DefaultTableModel)table.getModel(); model.addRow( new Object[] { data1, data2 } ); } 

附注

  • 您不需要两个main方法,因为我假设Main类已经有一个main方法。
  • 另请参阅使用多个JFrame,好/坏练习? 。 看起来你的Journal类在它的main方法中使用了一个JFrame ,我假设你的Main类也是一个JFrame 。 您可以做的就是将Journal作为JDialog并将JTable添加到它。