Java 无法更新JFrame
我正在尝试更新帧,但没有发生。我如何做,以及当Refresh()调用时会发生什么Java 无法更新JFrame,java,swing,jframe,Java,Swing,Jframe,我正在尝试更新帧,但没有发生。我如何做,以及当Refresh()调用时会发生什么 对不起,我说的是英语。您需要更正代码中的许多内容: 您需要正确地创建组件层次结构,并实例化组件层次结构中的所有对象。在您的示例中,应该正确初始化JFrame->JPanel->JTable并将其添加到组件层次结构中。您的代码没有实例化名为panel1的JPanel。您将在这一行setContentPane(panel1)中得到一个空指针异常 pack()和设置可见(真)方法。它们应该在Refresh()方法之后调
对不起,我说的是英语。您需要更正代码中的许多内容:
panel1
的JPanel
。您将在这一行setContentPane(panel1)中得到一个空指针异常代码>
pack()代码>和设置可见(真)应该在显示UI之前调用代码>方法。它们应该在Refresh()方法之后调用。同样,使用命名约定来正确命名类和方法
public class tttt extends JFrame{
private JTable tab;
private JPanel panel1;
private JButton btnAddData;
private void createUIComponents() {//Custom Create for tab
Object[][] data1 = {{'1'}};
Object[] data2 = {'2'};
tab = new JTable(data1, data2);
btnAddData = new JButton("Refresh");
btnAddData.addActionListener(e->Refresh());
panel1 = new JPanel(new BorderLayout(10, 10));
panel1.add(btnAddData, BorderLayout.NORTH);
panel1.add(tab, BorderLayout.CENTER);
}
public void CreateFrame(){
createUIComponents();
setContentPane(panel1);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
}
public void Refresh(){
Object[][] data1 = {{'9'}};
Object[] data2 = {'9'};
tab.setModel(new DefaultTableModel(data1, data2));
revalidate();
}
public static void main(String[] args) {
tttt Frame = new tttt();//create frame with table with '1'
Frame.CreateFrame();
// Frame.Refresh();//frame doesn`t change
}
}
您没有将tab添加到任何父组件。“通常”您只需更改模型数据,但由于您没有将其添加到任何组件中,这将是毫无意义的。您也可以考虑使用<代码>卡布局< /代码>,以便在视图之间切换更容易。如果这就是你想要做的。它在不同的文件中,并且是独立的。2.我在Intellij IDEA3的组件树中执行层次结构。使用pack();和setVisible(true);正如你所说,这并不能解决我的问题。我要说的是,这只是一个简化问题的例子。真正的项目更大,名字更好。好的。。那太好了。。我会更新我的答案。你能考虑第2点和第3点吗?你检查了点2吗?您没有初始化Jpanel,也没有将表添加到jpanelcreateUIComponents()调用创建的表中,因此我不会得到Null指针异常
public class tttt extends JFrame{
private JTable tab;
private JPanel panel1;
private JButton btnAddData;
private void createUIComponents() {//Custom Create for tab
Object[][] data1 = {{'1'}};
Object[] data2 = {'2'};
tab = new JTable(data1, data2);
btnAddData = new JButton("Refresh");
btnAddData.addActionListener(e->Refresh());
panel1 = new JPanel(new BorderLayout(10, 10));
panel1.add(btnAddData, BorderLayout.NORTH);
panel1.add(tab, BorderLayout.CENTER);
}
public void CreateFrame(){
createUIComponents();
setContentPane(panel1);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
}
public void Refresh(){
Object[][] data1 = {{'9'}};
Object[] data2 = {'9'};
tab.setModel(new DefaultTableModel(data1, data2));
revalidate();
}
public static void main(String[] args) {
tttt Frame = new tttt();//create frame with table with '1'
Frame.CreateFrame();
// Frame.Refresh();//frame doesn`t change
}
}