在程序中的某一點,它打開一個JDialog,顯示有關程序運行過程中發生的事情的信息。它有幾個標籤和一個進度條,但是當對話窗口打開時,它不顯示任何內容。我的自定義JDialog出現,但爲空
這裏的自定義對話框,它的構造:
public class DataMiner implements ActionListener
{
private Hashtable<Integer, GISNode> nodeTable;
private Hashtable<Integer, GISLink> linkTable;
private int numLinesIgnored;
private int numLinesProcessed;
private int numNodes;
private int numLinks;
private int numDuplicates;
private int numFailedGeoCodingRequests;
private boolean cancelled;
// window objects
private JDialog window;
private JLabel LinesIgnored;
private JLabel LinesProcessed;
private JLabel Nodes;
private JLabel Links;
private JLabel Duplicates; // tracks the number of equivalent data entries found.
private JLabel FailedGeoCodingRequests;
private JProgressBar progressBar;
private JButton cancelButton;
public DataMiner(JFrame parentWindow)
{
nodeTable = new Hashtable<Integer, GISNode>(1000);
linkTable = new Hashtable<Integer, GISLink>(1000);
numLinesIgnored = 0;
numLinesProcessed = 0;
numNodes = 0;
numLinks = 0;
numDuplicates = 0;
numFailedGeoCodingRequests = 0;
cancelled = false;
LinesIgnored = new JLabel();
LinesProcessed = new JLabel();
Nodes = new JLabel();
Links = new JLabel();
Duplicates = new JLabel();
FailedGeoCodingRequests = new JLabel();
cancelButton = new JButton("Cancel");
progressBar = new JProgressBar();
updateLabels(); // assigns a formatted string to each JLabel
cancelButton.addActionListener(this);
// initialize window
window = new JDialog(parentWindow);
window.setResizable(false);
window.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
Container content = window.getContentPane();
content.setLayout(new GridLayout(7,1));
content.add(LinesProcessed);
content.add(Nodes);
content.add(Links);
content.add(Duplicates);
content.add(LinesIgnored);
content.add(FailedGeoCodingRequests);
content.add(progressBar);
JPanel p1 = new JPanel();
p1.add(new JLabel("")); // takes up space
p1.add(cancelButton);
content.add(p1);
window.pack();
window.setLocationRelativeTo(parentWindow);
window.setVisible(true);
}
(rest of the class...)
}
一旦這個窗口打開時,該程序的其餘部分保持執行正常的,只是這個窗口是空白。我錯過了什麼?
是否顯示對話框?如果沒有,請先嚐試使用JDialog的setSize()。 – 2010-11-21 22:32:45
@pouncep:它顯示出來,只是沒有任何內容。 – Max 2010-11-21 22:38:54
嘗試使用['invokeLater'](http://download.oracle.com/javase/tutorial/uiswing/concurrency/initial.html)從事件派發線程調用'window.setVisible(true)'。 – casablanca 2010-11-21 22:49:09