我有一個Java應用程序使用JTable
來顯示一些數據。我想輸入來自JDialog
的數據。Java JComponents在JDialog關閉後沒有重新繪製
我面臨的問題是在打開JDialog
後,主窗口GUI不會再刷新。我試圖將其更改爲JFrame
,並獲得相同的行爲。如果我使用JPanel
更改JTable
,也會發生同樣的情況。一切正常,直到主窗口頂部打開一個窗口。在此之後,GUI元素將不會刷新,但按鈕仍會對點擊作出反應。
有人可以幫助我瞭解什麼是錯的。
抱歉,我們無法分享任何代碼。早上五點,我完全忘了。 我有一個框架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();
}
}
這是代碼。感謝您的幫助!
您可以請張貼一些代碼。另外,請解釋'refresh'是什麼意思 - 你是否說你不能再與主JFrame交互,或者JFrame沒有重新繪製(只顯示爲純灰色),還是你期望JTable會自動更新您的JDialog數據?說它「不刷新」並不夠具體。 – wattostudios
*「有沒有人知道爲什麼這種奇怪的行爲?」 - 幾個,其中沒有一個可能會影響你。向我們顯示代碼 – MadProgrammer
http://sscce.org/ –