我正在尝试制作一个程序,其中显示的JTabel会根据用户选择的文件进行更改。他们通过单击调用某个方法()的按钮来输入它,该方法返回一个新的JTable。但我无法在GUI中获取更新表。
public class program extends JFrame{
public JPanel panel;
public JTable table;
public program{
this.panel = new JPanel();
panel.setLayout(new FlowLayout());
JTable table = new JTable();
panel.add(table);
JButton button = new JButton();
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
JFileChooser chooser = new JFileChooser();
if(browser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION){
table = method(); //some method that changes the values of the table
panel.revalidate();
panel.repaint();
}
};
});
panel.add(button);
setContentPane(panel);
setVisible(true);
}
private static JTable method(){ ... }
public static void main(String[] args){
program something = new program();
}
}
我不完全确定validate()
,revalidate()
和repaint()
之间的差异,尽管他们已经阅读了很多内容。我也试过table.revalidate()
等。相反,但这也不好。
编辑:感谢您的帮助,现在全部排序了:)我将我的ActionListener重写为resueman的“指示”:
JButton button = new JButton();
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
JFileChooser chooser = new JFileChooser();
if(browser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION){
panel.remove(table);
table = method();
panel.add(table);
panel.revalidate();
panel.repaint();
}
};
});
我犹豫是否这样做,因为FlowLayout会把它放在我不想要的地方。但是在主要内部有额外的JPanel,它可以被控制。
感谢您的评论,大家都救了我的一天!
答案 0 :(得分:2)
如果您可以重新设计更改表格内容,则无需担心手动重新绘制。
尝试将代码修改为
table.setModel (method());
并model ()
返回TableModel
而不是JTable
。
您没有看到任何更改,因为旧的JTable
仍会添加到您的面板中。如果您坚持按照原样保留方法,则必须删除旧的/添加新内容。
祝你好运。