我有一个使用JTable
显示一些数据的Java应用程序。我想从JDialog
输入数据。
我面临的问题是主窗口GUI在JDialog
打开后不再刷新。我试图将其更改为JFrame
并获得相同的行为。如果我使用JTable
更改JPanel
,也会发生同样的情况。一切正常,直到主窗口顶部打开一个窗口。在此之后,GUI元素不会刷新,但按钮仍会对点击做出反应。
有人可以帮我理解错误。
很抱歉不共享任何代码。早上5点,我完全忘记了。
我有一个JTable
和JButton
的框架。该按钮可打开JDialog
。 JDialog
的面板嵌套有JTextField
和JButton
。当我按下JDialog
中的按钮时,它会将数据发送到主框架。在那里,我想用收到的数据填充表格。我可以在debuger中看到数据。问题是,在我重新启动应用程序之前,它不会显示在表中。我还在与表格相同的框架中添加了一个按钮来测试数据插入,它工作正常。
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();
}
}
这是代码。谢谢你的帮助!
答案 0 :(得分:2)
如果您的JDialog
模态,则可能会发生这种情况。而是创建一个无模式对话框,让主窗口注册为对话框的PropertyChangeListener
。在此example中,主窗口中的JPanel
会在对话框中侦听ObservedPanel
的实例。