java 从 JTextField 到 JTable 的数据

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/12875517/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-31 10:36:50  来源:igfitidea点击:

Data from JTextField to JTable

javaswingjtablejframedefaulttablemodel

提问by Moe

I would like to add the data entered in the text box to the table and keep on incremented ID. the data is added when the button "Add" is clicked.

我想将在文本框中输入的数据添加到表格中并保持递增的 ID。单击“添加”按钮时添加数据。

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;

    public class ex1 extends JFrame {
    GridLayout experimentLayout = new GridLayout(3, 3);
    private javax.swing.JButton jButton1,jButton2,jButton3;
    private javax.swing.JLabel jLabel1, jLabel2, jLabel3;

    private javax.swing.JTextField jTextField1,jTextField2,jTextField3;

    String columns[] = {"ID","Name","Age","Gender"};
    Object data[][] = {
            {"0","Tom",new Integer(20),"Male"},
            {"1","Tina", new Integer(18), "Female"},
            {"2","Raj",new Integer(19),"Male"}

    };

    public void addComponentsToPane(final Container pane) {
        final JPanel compsToExperiment = new JPanel();

        compsToExperiment.setLayout(experimentLayout);
        JPanel controls = new JPanel();
        controls.setLayout(new GridLayout(8, 3));

        jLabel1 = new javax.swing.JLabel("Name: ");
        jLabel2 = new javax.swing.JLabel("Age: ");
        jLabel3 = new javax.swing.JLabel("Gender: ");
        jTextField1 = new javax.swing.JTextField();
        jTextField2 = new javax.swing.JTextField();
        jTextField3 = new javax.swing.JTextField();
        jButton1 = new javax.swing.JButton("Add");
        jButton2 = new javax.swing.JButton("Next");
        jButton3 = new javax.swing.JButton("Per");

        compsToExperiment.add(jLabel1);
        compsToExperiment.add(jLabel2);
        compsToExperiment.add(jLabel3);

        compsToExperiment.add(jTextField1);
        compsToExperiment.add(jTextField2);
        compsToExperiment.add(jTextField3);
        compsToExperiment.add(jButton1);

        JTable table = new JTable(data,columns);
        controls.add(table.getTableHeader());
        controls.add(table);
            pane.add(compsToExperiment, BorderLayout.NORTH);
        pane.add(controls, BorderLayout.CENTER);
    }

    /**
     * Create the GUI and show it. For thread safety, this method is invoked
     * from the event dispatch thread.
     */
    private static void createAndShowGUI() {        
        ex1 frame = new ex1();      
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
        frame.addComponentsToPane(frame.getContentPane());
        frame.setSize(500,500);
        //frame.pack();     
        frame.setVisible(true);
    }

    public static void main(String[] args) {

        try {           
            UIManager.setLookAndFeel(
                "javax.swing.plaf.metal.MetalLookAndFeel");
        } catch (UnsupportedLookAndFeelException ex) {
            ex.printStackTrace();
        } catch (IllegalAccessException ex) {
            ex.printStackTrace();
        } catch (InstantiationException ex) {
            ex.printStackTrace();
        } catch (ClassNotFoundException ex) {
            ex.printStackTrace();
        }
        /* Turn off metal's use of bold fonts */
        UIManager.put("swing.boldMetal", Boolean.FALSE);

        // Schedule a job for the event dispatch thread:
        // creating and showing this application's GUI.
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}

I know the the design is all over the place I've just started learning java, feel free to point out improvement that can made. Thank you in advance :)

我知道设计无处不在,我刚开始学习 Java,随时指出可以做出的改进。先感谢您 :)

回答by Reimeus

To add the data entered in the JTextFieldsyou will need to register an ActionListenerto your add button, in this case jButton1.

要添加输入的数据,JTextFields您需要ActionListener在添加按钮上注册一个,在本例中为jButton1

To add entries to your table model you could use a mutable model such as DefaultTableModel:

要将条目添加到您的表模型,您可以使用可变模型,例如DefaultTableModel

DefaultTableModel model = new DefaultTableModel(data, columns);

In the actionPerformedmethod of your ActionListeneryou will have:

actionPerformed您的方法中,您ActionListener将拥有:

String nextRowId = Integer.toString(model.getRowCount());
model.addRow(new Object[] { 
              nextRowId, 
              jTextField1.getText(), 
              jTextField2.getText(), 
              jTextField3.getText() });

The following are recommended:

推荐以下内容:

  • Use more meaningful names for variables.
  • Allocate more space to the JTablewhich could potentially hold a large amount of data. Also place inside a JScrollPane.
  • 为变量使用更有意义的名称。
  • JTable可能包含大量数据的对象分配更多空间。也放在一个JScrollPane.