Reputation: 33
I create a simple register form to add Name, Gender and city to the table, but i got some problem here. My table only will refresh when i click the maximize button on the left top of my form.
here is the code: http://pastebin.com/dFnix5NY
package test;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.io.IOException;
import java.util.*;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JList;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
public class Main extends JFrame{
private Vector<String> columnNames = new Vector<String>();
private Vector data = new Vector<>();
private Vector<Vector> details = new Vector<Vector>();
private DefaultTableModel dtm = new DefaultTableModel(details, columnNames);
private JTable table = new JTable(dtm);
private JScrollPane spane = new JScrollPane(table);
private JTextField field1 = new JTextField("Nama");
private JTextField field2 = new JTextField("Gender");
private JTextField field3 = new JTextField("City");
private JButton ok = new JButton("Ok");
JPanel panelForm = new JPanel(new GridLayout(1,4));
Main(){
columnNames.add("Nama");
columnNames.add("city");
columnNames.add("Gender");
data.add("Dodi");
data.add("Jakrta");
data.add("Laki");
details.add(data);
panelForm.add(field1);
panelForm.add(field2);
panelForm.add(field3);
panelForm.add(ok);
ok.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
data = new Vector<>();
data.add(field1.getText());
data.add(field2.getText());
data.add(field3.getText());
details.add(data);
}
});
dtm = new DefaultTableModel(details, columnNames);
table = new JTable(dtm);
spane.setViewportView(table);
add(panelForm, BorderLayout.SOUTH);
add(spane, BorderLayout.CENTER);
setTitle("Registration");
setSize(300, 300);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new Main();
}
}
Upvotes: 3
Views: 108
Reputation: 10994
Add new rows to TableModel
not to Vector
, replace next line details.add(data);
in actionPerformed()
method to dtm.addRow(data);
.
After adding row to TableModel
, it fires events for refreshing.
Upvotes: 3
Reputation: 2253
To add row you need to call dtm.addRow(data);
And add row to your DefaultTableModel
instead of list.
So the updated code will look like:
ok.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
data = new Vector<>();
data.add(field1.getText());
data.add(field2.getText());
data.add(field3.getText());
dtm.addRow(data);
}
});
Upvotes: 0