簡體   English   中英

我的自定義JDialog出現,但為空

[英]my custom JDialog appears, but is blank

在程序的某個點,它打開一個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...)
}

打開此窗口后,程序的其余部分將繼續正常運行,只是此窗口為空白。 我有什么想念的嗎?

可能是因為您阻止了EventDispatchThread,所以GUI無法重繪自身。 閱讀Swing 並發教程中的有關更多信息的部分。

由於您沒有提供適當的SSCCE,所以我們只能做猜測。

真的很奇怪 這段代碼對我來說效果很好,意思是顯示一個空的主窗口(是正確的)和“彈出窗口”子框架窗口(您說這對您不起作用)。 我在Ubuntu下使用了NetBeans 6.8和Java 1.6:

package javaapplication2;

import java.awt.Container;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;

public class MainFrame extends javax.swing.JFrame {

    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;

    /** Creates new form MainFrame */
    public MainFrame() {
        initComponents();

        JFrame parentWindow = this;


        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();

    // 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);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new MainFrame().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify
    // End of variables declaration

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM