gpt4 book ai didi

JDialog 关闭后 Java JComponents 不重绘

转载 作者:行者123 更新时间:2023-11-30 09:30:54 25 4
gpt4 key购买 nike

我有一个 Java 应用程序,它使用 JTable 来显示一些数据。我想从 JDialog 输入数据。

我面临的问题是在 JDialog 打开后主窗口 GUI 将不再刷新。我试图将其更改为 JFrame 并且我得到了相同的行为。如果我用 JPanel 更改 JTable,也会发生同样的情况。一切正常,直到在主窗口顶部打开一个窗口。此后,GUI 元素不会刷新,但按钮仍会对点击使用react。

谁能帮我理解哪里出了问题。

很抱歉没有分享任何代码。那是早上 5 点,我完全忘记了。我有一个带有 JTableJButton 的框架。该按钮打开 JDialogJDialog 有一个嵌套了 JTextFieldJButton 的面板。当我按下 JDialog 中的按钮时,它会将数据发送到主框架。我想用收到的数据填充表格。我可以在调试器中看到数据。问题是在我重新启动应用程序之前它不会显示在表中。我还在与表格相同的框架中添加了一个按钮来测试数据插入,它工作得很好。

public class GUIRezervari {

private static JButton butonNew;
private static JTable tabelRezervari;
public static DefaultTableModel dtm;
private static JScrollPane scrollPaneTabel;
private static JPanel panelRezervari;

private GUIRezervari(){

}

public static JPanel getGui(){
setPanelRezervari();

return panelRezervari;
}

private static void setPanelRezervari(){
panelRezervari=new JPanel();
panelRezervari.setLayout(new BoxLayout(panelRezervari, 0));

Box hBox=Box.createHorizontalBox();
hBox.add(Box.createHorizontalGlue());
hBox.add(boxRezervari());
hBox.add(Box.createHorizontalGlue());

panelRezervari.add(hBox);
}
private static Box boxRezervari(){
Box vBox=Box.createVerticalBox();

vBox.add(Box.createVerticalStrut(20));
vBox.add(boxButoane());
vBox.add(Box.createHorizontalStrut(10));
vBox.add(boxTabel());
vBox.add(Box.createVerticalStrut(20));

return vBox;
}

private static Box boxButoane(){
Box hBox=Box.createHorizontalBox();

butonNew=new JButton("New");
butonNew.addActionListener(new RezervareNouaAL());

hBox.add(Box.createHorizontalStrut(10));
hBox.add(butonNew);
hBox.add(Box.createHorizontalGlue());
hBox.add(Box.createHorizontalStrut(10));

return hBox;
}

private static Box boxTabel(){
Box hBox=Box.createHorizontalBox();

dtm=new DefaultTableModel();
dtm.addColumn("Date");
dtm.addColumn("Name");

tabelRezervari=new JTable(dtm);
scrollPaneTabel=new JScrollPane(tabelRezervari);

hBox.add(scrollPaneTabel);

return hBox;
}
}

public class RezervareNouaAL implements ActionListener{

@Override
public void actionPerformed(ActionEvent ae) {

GUIRezervare.getFrame((JFrame)GUIRezervari.getGui().getParent());
}

}

public class GUIRezervare {

private static JLabel labelName;
private static JLabel labelDate;
private static JTextField fieldName;
private static JTextField fieldDate;
private static JButton butonSalveaza;
private static JButton butonAnuleaza;
private static JPanel panelRezervare;
private static JDialog frame;

private GUIRezervare(){

}

public static void getFrame(JFrame panel) {

setGui();
frame = new JDialog(panel, "Rezervare", true);
frame.add(panelRezervare);
frame.pack();
frame.setVisible(true);

frame.setTitle("Adauga rezervare");

}

public static JPanel getGui(){
setGui();

return panelRezervare;
}

private static void setGui(){
panelRezervare=new JPanel();
panelRezervare.setLayout(new BoxLayout(panelRezervare, 0));
panelRezervare.setBorder(BorderFactory.createTitledBorder("Rezervare"));
panelRezervare.setBackground(new Color(242,197,61));

Box vBox=Box.createVerticalBox();

vBox.add(Box.createVerticalStrut(10));
vBox.add(panelRezervare());
vBox.add(Box.createVerticalStrut(10));
vBox.add(boxButoane());
vBox.add(Box.createVerticalStrut(10));

panelRezervare.add(vBox);
}
private static JPanel panelRezervare(){
JPanel panelRezervareT=new JPanel();
panelRezervareT.setBorder(BorderFactory.createTitledBorder("Date rezervare"));
panelRezervareT.add(boxRezervare());
panelRezervareT.setBackground(new Color(169,217,190));

return panelRezervareT;
}
private static Box boxRezervare(){
Box hBox=Box.createHorizontalBox();

hBox.add(Box.createHorizontalGlue());
hBox.add(boxStanga());
hBox.add(Box.createHorizontalStrut(10));
hBox.add(Box.createHorizontalGlue());

return hBox;
}

private static Box boxStanga(){
Box vBox=Box.createVerticalBox();

vBox.add(boxName());
vBox.add(Box.createVerticalStrut(5));
vBox.add(boxDate());
vBox.add(Box.createVerticalStrut(5));

return vBox;
}

private static Box boxDate(){
Box hBox=Box.createHorizontalBox();

labelDate=new JLabel("Date :");
fieldDate=new JTextField();

hBox.add(labelDate);
hBox.add(Box.createHorizontalStrut(10));
hBox.add(Box.createHorizontalGlue());
hBox.add(fieldDate);

return hBox;
}

private static Box boxName(){
Box hBox=Box.createHorizontalBox();

labelName=new JLabel("Name :");
fieldName=new JTextField();

hBox.add(labelName);
hBox.add(Box.createHorizontalStrut(10));
hBox.add(Box.createHorizontalGlue());
hBox.add(fieldName);

return hBox;
}


private static Box boxButoane(){
Box hBox=Box.createHorizontalBox();

butonSalveaza=new JButton("Salveaza");
butonSalveaza.addActionListener(new SalveazaClientAL());
butonAnuleaza=new JButton("Anulaeza");
butonAnuleaza.addActionListener(new ActionListener(){

@Override
public void actionPerformed(ActionEvent ae) {

frame.dispose();
}

});

hBox.add(butonSalveaza);
hBox.add(Box.createHorizontalStrut(10));
hBox.add(butonAnuleaza);

return hBox;
}

public static String getFieldName() {
return fieldName.getText();
}

public static String getFieldDate() {
return fieldDate.getText();
}

public static void inchideFrame(){
frame.dispose();
}
}

public class SalveazaClientAL implements ActionListener{

@Override
public void actionPerformed(ActionEvent ae) {

GUIRezervari.dtm.addRow(new Object[]{GUIRezervare.getFieldName(),GUIRezervare.getFieldDate()});
GUIRezervare.inchideFrame();
}

}

这是代码。感谢您的帮助!

最佳答案

如果您的 JDialog 可能会发生这种情况是模态的。相反,创建一个无模式 对话框,并让您的主窗口注册为对话框的PropertyChangeListener。在这个example , 主窗口中的 JPanel 监听 ObservedPanel 的一个实例在对话框中。

关于JDialog 关闭后 Java JComponents 不重绘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13079730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com