1

JProgressMonitorモーダルを作成する方法はなく、むしろ。を使用する方法があることを理解JDialogしていJProgressBarます。JDialog今、私はそれを機能させました-しかし、私がモーダルを作ろうとしていない限りだけです。誰かが私が間違っていることを教えてもらえますか?

private Frame frame;
private JPanel contentPane;
private JProgressBar progressBar;

public MainClass() {
    JButton startBtn = new JButton("Start");
    startBtn.addActionListener(new ActionListener()
    {
        @Override
        public void actionPerformed(final ActionEvent arg0)
        {
            new Thread(new Runnable()
            {
                @Override
                public void run()
                {
                    createJDialog();

                    for (int i = 0; i < 100; ++i)
                    {
                        final int j = i;
                        doInBackground(); // Batch process

                        SwingUtilities.invokeLater(new Runnable()
                        {
                            @Override
                            public void run()
                            {
                                progressBar.setValue(j);
                            }
                        });
                    }
                }
            }).start();
        }
    });
}

public void createJDialog()
{
    JDialog d = new JDialog(); 
    d.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    // Keeps progressBar from updating
    // d.setModalityType(Dialog.ModalityType.APPLICATION_MODAL);
    // d.setModal(true);
    d.getContentPane().add(progressBar, BorderLayout.PAGE_START); 
    d.getContentPane().add(progressBar, BorderLayout.PAGE_END); 
    d.pack(); 
    d.setVisible(true); 
}
4

2 に答える 2

3

createJDialog();inner からではなく、スレッド開始後に呼び出しますRunnable

于 2013-01-09T16:52:00.263 に答える
2

Java APId.setVisible(true)のドキュメントによると、ダイアログがモーダルのときにダイアログが閉じるまでのブロックの呼び出し。

別のスレッドでその呼び出しを開始してみてください。

于 2013-01-09T16:54:26.383 に答える