0
我已經構建了一個Java GUI,它將聯繫人數據添加到ArrayList
。 JTable
也將從ArrayList
更新。但是,在添加新項目後,我的JTable
未獲得更新。我已經使用 table.repaint()
和table.fireTableDataChanged()
。這是代碼。我不知道什麼是錯的。嘗試添加新聯繫人並查看更改。沒什麼。java fireTableDataChanged()不工作
public class TableDemo extends JPanel implements ActionListener {
private JLabel name, contact;
private JTextField nameField, contactField;
private static JButton addButton, ok;
JTable table;
JFrame myFrame;
MyTableModel myModel;
public TableDemo() {
super(new GridLayout(1, 0));
myModel = new MyTableModel();
myModel.fireTableDataChanged();
table = new JTable(myModel);
table.setFillsViewportHeight(true);
table.setPreferredScrollableViewportSize(new Dimension(500, 70));
table.setFillsViewportHeight(true);
// Create the scroll pane and add the table to it.
JScrollPane scrollPane = new JScrollPane(table);
// Add the scroll pane to this panel.
add(scrollPane);
}
class MyTableModel extends AbstractTableModel {
private String[] columnNames = { "Full Name", "Contact Number" };
ArrayList dataList = new ArrayList();
public MyTableModel() {
}
public MyTableModel(Contact c) {
dataList.add(c);
}
public int getColumnCount() {
return columnNames.length;
}
public int getRowCount() {
return dataList.size();
}
public String getColumnName(int col) {
return columnNames[col];
}
public Object getValueAt(int row, int col) {
Contact widget = (Contact) dataList.get(row);
switch (col) {
case 0:
return widget.getFullName();
case 1:
return widget.getPhoneNumber();
default:
return null;
}
}
public void setValueAt(Contact c, int row, int column) {
Contact co = (Contact) dataList.get(row);
switch (column) {
}
}
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
public boolean isCellEditable(int row, int col) {
return false;
}
public void addContact(Contact c) {
dataList.add(c);
fireTableDataChanged();
}
}
public void setValueAt(Object value, int row, int col) {
// dataList = value;
myModel.fireTableCellUpdated(row, col);
}
private static void createAndShowGUI() {
// Create and set up the window.
JFrame frame = new JFrame("TableDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Create and set up the content pane.
TableDemo newContentPane = new TableDemo();
newContentPane.setOpaque(true); // content panes must be opaque
frame.setContentPane(newContentPane);
addButton = new JButton("Add");
JPanel myPanel = new JPanel();
myPanel.add(addButton);
addButton.addActionListener(new TableDemo());
frame.setLayout(new GridLayout(2, 1));
frame.setResizable(false);
frame.setSize(500, 500);
frame.add(myPanel);
// Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
// Schedule a job for the event-dispatching thread:
// creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
newFrame();
}
public void newFrame() {
myFrame = new JFrame();
JPanel myPanel = new JPanel();
name = new JLabel("Full Name");
nameField = new JTextField(10);
contact = new JLabel("Contact Number");
contactField = new JTextField(10);
ok = new JButton("OK");
ok.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
myModel.addContact(new Contact(nameField.getText(),
contactField.getText()));
myFrame.dispose();
}
});
myPanel.add(name);
myPanel.add(nameField);
myPanel.add(contact);
myPanel.add(contactField);
myPanel.add(ok);
myFrame.add(myPanel);
myFrame.setVisible(true);
myFrame.setSize(250, 250);
}
}
public class Contact {
String fullName, phoneNumber;
public Contact(String fullName, String phoneNumber)
{
this.fullName = fullName;
this.phoneNumber = phoneNumber;
}
public String getFullName() {
return fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
>public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
}