【问题标题】:Java: GUI - JButton opening new JPanel and reading the JTextFieldsJava:GUI - JButton 打开新的 JPanel 并读取 JTextFields
【发布时间】:2014-02-10 12:13:12
【问题描述】:

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

我使用netbeans创建主类和我自己创建表类的方法请帮助!谢谢! 这是当我右键单击 > 事件 > 操作 > 执行的操作时 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();
                }
            });
    }
}

【问题讨论】:

    标签: java swing jtable jbutton jtextfield


    【解决方案1】:

    目前您的JTableJournal 构造函数中是本地范围的,因此无法从其他任何地方访问。您要做的是将其声明为 class-member 并为其设置 getter

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

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

    您还需要使用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 类在其main 方法中使用了JFrame,我假设您的Main 类也是JFrame。您可以做的就是将Journal 设为JDialog 并将JTable 添加到其中。

    【讨论】:

      猜你喜欢
      • 2013-02-09
      • 2017-12-27
      • 2014-07-23
      • 2017-11-25
      • 1970-01-01
      • 2013-09-22
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多