1
私は、私のbuttonListenerメソッドで '新しいGUI()'を使用する場合にのみ、データを追加する単純なJTableアプリケーションを持っています。それ以外の場合は動作しません。私はこのコード内のすべての場所でFireTable ...メソッドを使用しようとしました。 mainFrame/mainPanel.repaint()も試しました。 table.revalidate();JTableは、GUI()の新しいインスタンスを呼び出すときにのみリフレッシュされます。
メインクラス
public class AddressBook {
public static void main(String[] args) {
try
{
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
new GUI();
}
catch(Exception e){
System.out.println("GUI loading error..");
}
}
}
GUI()クラス
public GUI() {
/** Main Frame, Panels, Borders */
mainFrame = new JFrame("Address Book");
mainPanel = new JPanel(new GridBagLayout());
mainPanel.setBorder(BorderFactory.createEmptyBorder(borderOffset, borderOffset, borderOffset, borderOffset)); // up, left, down, right
GridBagConstraints c = new GridBagConstraints();
tablePanel = new JPanel();
tablePanel.setLayout((new BoxLayout(tablePanel,BoxLayout.PAGE_AXIS)));
buttonsPanel = new JPanel();
buttonsPanel.setLayout((new BoxLayout(buttonsPanel,BoxLayout.PAGE_AXIS)));
/** Head of table */
model = new MyTableModel();
table = new JTable(model);
table.setPreferredScrollableViewportSize(new Dimension(500, 50));
/** Heart of table */
scrollPane = new JScrollPane(table);
/** Title of app */
titleLabel = new JLabel("Address Book");
titleLabel.setFont(new Font(null, Font.PLAIN, 15));
titleLabel.setForeground(Color.GRAY);
/** Buttons */
final int BUTTONS_WIDTH = 130;
final int BUTTONS_HEIGHT = 40;
addButton = new JButton("Add new person");
addButton.setPreferredSize(new Dimension(BUTTONS_WIDTH, BUTTONS_HEIGHT));
addButton.addActionListener(new addButtonListener());
editButton = new JButton("Edit person");
editButton.setPreferredSize(new Dimension(BUTTONS_WIDTH, BUTTONS_HEIGHT));
editButton.addActionListener(new editButtonListener());
deleteButton = new JButton("Delete person");
deleteButton.setPreferredSize(new Dimension(BUTTONS_WIDTH, BUTTONS_HEIGHT));
/** Separator */
separatorH = new JSeparator(JSeparator.HORIZONTAL);
separatorH.setPreferredSize(new Dimension(2,2));
tablePanel.add(table.getTableHeader());
tablePanel.add(scrollPane);
buttonsPanel.add(addButton);
buttonsPanel.add(Box.createRigidArea(new Dimension(0, 3)));
buttonsPanel.add(editButton);
buttonsPanel.add(Box.createRigidArea(new Dimension(0, 3)));
buttonsPanel.add(deleteButton);
/** Relocate compoments */
c.gridx = 0;
c.gridy = 0;
c.insets = new Insets(0,2,2,0);
c.anchor = GridBagConstraints.FIRST_LINE_START;
mainPanel.add(titleLabel, c);
c.gridx = 0;
c.gridy = 1;
c.insets = new Insets(0,0,0,0);
c.fill = GridBagConstraints.HORIZONTAL;
mainPanel.add(separatorH, c);
c.gridx = 0;
c.gridy = 2;
c.insets = new Insets(10,0,0,0);
mainPanel.add(tablePanel, c);
c.gridx = 1;
c.gridy = 2;
c.insets = new Insets(9,10,0,0);
mainPanel.add(buttonsPanel, c);
/** Activate Main Frame and its properties */
mainFrame.add(mainPanel);
mainFrame.setBounds(200, 100, 0, 0);
mainFrame.setResizable(true);
mainFrame.pack();
mainFrame.setVisible(true);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public class addButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent a) {
((MyTableModel)model).setValueAt("cos", "test", "email", 123124);
new GUI();
}
}
}
MyTableModelクラス
class MyTableModel extends AbstractTableModel {
private static final long serialVersionUID = 1L;
static private ArrayList<Person> personList = new ArrayList<Person>();
Object[][] persons = new Object[personList.size()][4];
int row;
int col;
static String name;
static String surname;
String email;
static int telephone;
private String[] columnNames = {"First Name",
"Last Name",
"E-mail",
"Telephone"};
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public String getColumnName(int col) {
return columnNames[col];
}
@Override
public int getRowCount() {
return persons.length;
}
@Override
public Object getValueAt(int row, int col) {
for(int i=0; i<personList.size(); i++) {
persons [i][0] = personList.get(i).name.toString();
persons [i][1] = personList.get(i).surname.toString();
persons [i][2] = personList.get(i).mail.toString();
persons [i][3] = personList.get(i).telephone;
}
return persons[row][col];
}
public void fire(Object value, int row, int col) {
persons[row][col] = value;
}
public void setValueAt(String n, String s, String e, int t){
name = n;
surname = s;
email = e;
telephone = t;
Person person = new Person(n, s, e, t);
personList.add(person);
}
}
Personクラス
public class Person {
String name;
String surname;
String mail;
int telephone;
public Person(String n, String s, String m, int t){
name = n;
surname = s;
mail = m;
telephone = t;
}
}
ください答えるように編集を参照してください。 –