简体   繁体   English

从JTextField到JTable的数据

[英]Data from JTextField to JTable

I would like to add the data entered in the text box to the table and keep on incremented ID. 我想将文本框中输入的数据添加到表中并继续增加ID。 the data is added when the button "Add" is clicked. 单击“添加”按钮时添加数据。

    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. 我知道设计已经到处开始学习java了,随便指出可以做出的改进。 Thank you in advance :) 先感谢您 :)

To add the data entered in the JTextFields you will need to register an ActionListener to 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 actionPerformed method of your ActionListener you will have: ActionListeneractionPerformed方法中,您将拥有:

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 JTable which could potentially hold a large amount of data. JTable分配更多空间,这可能会占用大量数据。 Also place inside a JScrollPane . 也放在JScrollPane

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM