问题
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.
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 :)
回答1:
To add the data entered in the JTextFields
you will need to register an ActionListener
to your add button, in this case jButton1
.
To add entries to your table model you could use a mutable model such as DefaultTableModel
:
DefaultTableModel model = new DefaultTableModel(data, columns);
In the actionPerformed
method of your ActionListener
you will have:
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. Also place inside aJScrollPane
.
来源:https://stackoverflow.com/questions/12875517/data-from-jtextfield-to-jtable