Jtable java fireTableDataChanged()不工作
我已经构建了一个Java GUI,它将联系人数据添加到Jtable java fireTableDataChanged()不工作,jtable,Jtable,我已经构建了一个Java GUI,它将联系人数据添加到ArrayList。JTable也将从ArrayList进行更新。但是,添加新项目后,myJTable不会得到更新。我用过 table.repaint()和table.fireTableDataChanged()。这是代码。我不知道怎么了。尝试添加新联系人并查看更改。没什么 public class TableDemo extends JPanel implements ActionListener { private JLabel nam
ArrayList
。JTable
也将从ArrayList
进行更新。但是,添加新项目后,myJTable
不会得到更新。我用过
table.repaint()
和table.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;
}
}
当您打开新的
JFrame
以显示供用户输入的文本字段时,您将创建一个新的TableDemo
对象,其中包含一个新的MyTableModel
,因此您的TableModel
将fireTableDataChanged()
而不是您想要的JTable
我为您创建了一个小示例,来看看它是如何工作的
MainApp类:
package de.professional_webworkx.blog.contactmanager;
import de.professional_webworkx.blog.contactmanager.view.frame.MainFrame;
import javax.swing.SwingUtilities;
/**
*
* @author Patrick Ott <Patrick.Ott@professional-webworkx.de>
*/
public class ContactManager {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
MainFrame mainFrame = new MainFrame();
}
});
}
}
主机
package de.professional_webworkx.blog.contactmanager.view.frame;
import de.professional_webworkx.blog.contactmanager.business.listener.AddContactListener;
import de.professional_webworkx.blog.contactmanager.domain.Contact;
import de.professional_webworkx.blog.contactmanager.view.table.model.ContactTableModel;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class MainFrame extends JFrame {
private JTable contactTable;
private JScrollPane scrollPane;
private ContactTableModel tableModel;
private List<Contact> contactList = new ArrayList<Contact>();
private JButton addContact;
public MainFrame() {
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("Contact List Manager");
JPanel contactTablePanel = initComponents();
addContact = new JButton("add new Contact");
addContact.addActionListener(new AddContactListener(contactTable));
this.getContentPane().add(addContact, BorderLayout.NORTH);
this.getContentPane().add(contactTablePanel, BorderLayout.CENTER);
this.setSize(new Dimension(1024, 768));
this.setVisible(true);
}
private JPanel initComponents() {
JPanel panel = new JPanel();
contactTable = new JTable(new ContactTableModel());
scrollPane = new JScrollPane(contactTable);
panel.add(scrollPane);
return panel;
}
}
不要打开新的JFrame,而是使用自己的JDialog实现
添加联系人对话框
package de.professional_webworkx.blog.contactmanager.view.dialogs;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class AddContactDialog extends JDialog {
JButton ok, close;
JTextField firstNameField;
JTextField lastNameField;
String firstName;
String lastName;
private final AddContactDialog dialog;
public AddContactDialog() {
this.dialog = this;
this.setLayout(new BorderLayout(10, 10));
this.setModal(true);
this.setTitle("create new Contact");
this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
this.setSize(new Dimension(350, 200));
this.getContentPane().add(initInputPanel(), BorderLayout.NORTH);
this.getContentPane().add(initDialogPanel(), BorderLayout.SOUTH);
this.pack();
this.setVisible(true);
}
/*
inits the TextField Panel
*/
private JPanel initInputPanel() {
JPanel panel = new JPanel(new GridLayout(2, 2));
firstNameField = new JTextField();
lastNameField = new JTextField();
panel.add(new JLabel("Firstname: "));
panel.add(firstNameField);
panel.add(new JLabel("Lastname: "));
panel.add(lastNameField);
return panel;
}
/*
inits the ButtonPanel
*/
private JPanel initDialogPanel() {
JPanel panel = new JPanel(new GridLayout(1, 2));
ok = new JButton("save");
ok.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
firstName = firstNameField.getText();
lastName = lastNameField.getText();
dialog.setVisible(false);
}
});
close = new JButton("cancel");
close.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dialog.setVisible(false);
}
});
panel.add(ok);
panel.add(close);
return panel;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
}
希望它能帮助你解决问题
帕特里克
package de.professional_webworkx.blog.contactmanager.view.table.model;
import de.professional_webworkx.blog.contactmanager.domain.Contact;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
public class ContactTableModel extends AbstractTableModel {
private final String[] columnNames = {"Firstname", "Lastname"};
List<Contact> contactList;
public ContactTableModel() {
contactList = new ArrayList<>();
contactList.add(new Contact("Patrick", "Ott"));
}
@Override
public int getRowCount() {
return contactList.size();
}
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public String getColumnName(int column) {
return columnNames[column];
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Contact contact = contactList.get(rowIndex);
switch(columnIndex) {
case(0):
return contact.getFirstName();
case(1):
return contact.getLastName();
}
return null;
}
public void addContact(final Contact contact) {
contactList.add(contact);
fireTableDataChanged();
}
}
package de.professional_webworkx.blog.contactmanager.business.listener;
import de.professional_webworkx.blog.contactmanager.domain.Contact;
import de.professional_webworkx.blog.contactmanager.view.dialogs.AddContactDialog;
import de.professional_webworkx.blog.contactmanager.view.table.model.ContactTableModel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JTable;
public class AddContactListener implements ActionListener {
private JTable table;
public AddContactListener(final JTable table) {
this.table = table;
}
@Override
public void actionPerformed(ActionEvent e) {
ContactTableModel model = (ContactTableModel)this.table.getModel();
AddContactDialog dialog = new AddContactDialog();
String firstName = dialog.getFirstName();
String lastName = dialog.getLastName();
model.addContact(new Contact(firstName, lastName));
}
}
package de.professional_webworkx.blog.contactmanager.view.dialogs;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class AddContactDialog extends JDialog {
JButton ok, close;
JTextField firstNameField;
JTextField lastNameField;
String firstName;
String lastName;
private final AddContactDialog dialog;
public AddContactDialog() {
this.dialog = this;
this.setLayout(new BorderLayout(10, 10));
this.setModal(true);
this.setTitle("create new Contact");
this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
this.setSize(new Dimension(350, 200));
this.getContentPane().add(initInputPanel(), BorderLayout.NORTH);
this.getContentPane().add(initDialogPanel(), BorderLayout.SOUTH);
this.pack();
this.setVisible(true);
}
/*
inits the TextField Panel
*/
private JPanel initInputPanel() {
JPanel panel = new JPanel(new GridLayout(2, 2));
firstNameField = new JTextField();
lastNameField = new JTextField();
panel.add(new JLabel("Firstname: "));
panel.add(firstNameField);
panel.add(new JLabel("Lastname: "));
panel.add(lastNameField);
return panel;
}
/*
inits the ButtonPanel
*/
private JPanel initDialogPanel() {
JPanel panel = new JPanel(new GridLayout(1, 2));
ok = new JButton("save");
ok.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
firstName = firstNameField.getText();
lastName = lastNameField.getText();
dialog.setVisible(false);
}
});
close = new JButton("cancel");
close.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dialog.setVisible(false);
}
});
panel.add(ok);
panel.add(close);
return panel;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
}