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

时间:2014-02-10 12:13:13

标签: java swing jtable jbutton jtextfield

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

我使用netbeans来创建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<data.length; row1++)
            {

                if(d > 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<data.length; row2++)
            {
                if(s > 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 < data[0].length; col3++)
            {
                int rowA = row3 + 1;
                int rowS = row3 - 1;
                int rows = 1;
                int colA = col3 + 1;
                int colS = col3 - 1;
                int cols = 1;
                if(s > 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();
                }
            });
    }
}

1 个答案:

答案 0 :(得分:3)

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

  public class Journal extends JPanel {
      private JTable table;

      public Journal() {
          table = new JTable(...);
      }

      public JTable getTable() {
          return table;
      }
  }

现在可以使用tableMain班级访问和检索getTable()

此外,您还希望使用TableModel动态更新数据。你可以使用一个简单的,已经实现的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方法。
  • 另请查看The Use of Multiple JFrames, Good/Bad Practice?。您的Journal课程似乎在其JFrame方法中使用main,我认为您的Main课程也是JFrame。您可以做的只是让Journal成为JDialog并将JTable添加到其中。