2009-08-10 8 views
3

JDialogという拡張子を1つ作成しました。内容はコンテンツペインにJProgressBarです。 JProgressBarは、所有者クラスによって値が設定されるようにするために公開されています。ContentPaneとJProgressBarが表示されない

Since I'm not allowed to use img tags...

public class ProgressBarDialog extends JDialog { 
    public JProgressBar bar; 

    public ProgressBarDialog(Frame owner, String title) { 
     super(owner, title); 
     bar = new JProgressBar(JProgressBar.HORIZONTAL, 0, 100); 
     bar.setValue(0); 
     bar.setStringPainted(true); 
     bar.setPreferredSize(new Dimension(200, 100)); 

     getContentPane().setLayout(new BorderLayout()); 
     getContentPane().add(bar, BorderLayout.CENTER); 

     setSize(200, 100); 
     setLocationRelativeTo(null); 
     setVisible(true); 
     toFront(); 
    } 
    public void setProgress(int p) { 
     bar.setValue(p); 
    } 
} 

このProgressBarDialogの使用コードは次のとおりです。私は新しいダイアログを作成すると、コンテンツペインには、それが代わりにプログレスバーで表示されているの背後にあるものは何でも、その結果、まったく表示されません。

これはかなり簡単な実装なので、私が紛失しているものがありますか?

私はCamickrの提案を受けて、ここでテストSSCCEを作成しました:TestDialog.java。あなたが分かるように、コードはまったく同じです。問題は、テストが正しく機能し、正しく表示されることです。ダイアログウィンドウの他の実装に関係するすべてのコードを追加しました。

答えて

1

プログレスバーのpreferredSize()size()を設定する必要があります。それはそれを現われるはずです。

あなたはのBorderLayoutを使用することができ
+0

setStringPainted()の後、コンテンツペインに追加する前にこれらの行を追加しました。 bar.setPreferredSize(new Dimension(200、100)); bar.setSize(200、100); まだ表示されていません。 –

0

:それはプログレスバーではないことはありませんので、これは半分満たされたフレームの内容全体をペイント

import java.awt.Dimension; 
import javax.swing.JFrame; 
import javax.swing.JProgressBar; 
public class FrameTest {  
    public static void main(String[] args) {   
     JFrame f = new JFrame();   
     JProgressBar b = new JProgressBar(0,100); 
     b.getModel().setValue(50);  
     f.getContentPane().add(b);  
     f.setSize(new Dimension(200,200)); 
     f.setVisible(true);  
    } 
} 

:私はいくつかのテストをした

contentPane.setLayout(new BorderLayout()); 
contentPane.add(bar, BorderLayout.CENTER); 
frame.setSize(200,200); 

[OK]を可視。それは、コンテンツ全体を塗りつぶして、そのモデルの0の値(進捗なし)と組み合わせて、そのように見えるだけです。

私はあなたが常に非常に貴重なスイングチュートリアルのセクションを読んで確信している: http://java.sun.com/docs/books/tutorial/uiswing/components/progress.html

+0

getContentPane()。setLayout(new BorderLayout()); getContentPane()。add(bar、BorderLayout.CENTER); とパックでバーが表示されませんでした。 –

0

私の最初の推測が(toFront場合に

setVisible(true); 
toFront(); 

を表示した後、zオーダーを入れ替えることであろう)no-opsを非表示のウィジェットに表示します。

+0

私は、あなたが提示した順序でコールを保つつもりですが、それでもパネルは表示されません。 –

2

a)進行状況バーは公開しないでください。その値を変更する場合は、セッターメソッドを作成します。

b)子ウィンドウとしてJFrameを使用しないでください。 JDialogを使用していて、フレームをダイアログの所有者として指定する必要があります。

c)JFrameまたはJDialogのデフォルトレイアウトはBorderLayoutなので、レイアウトをリセットする必要はありません。

d)setSize()とpack()を一緒に使用することは無意味です。パックはsetSize()をオーバーライドします。どちらか一方を使用してください。

e)コンポーネントに対してsetSize()およびsetPreferredSize()を使用することは役に立ちません。レイアウトマネージャは推奨サイズを提案として使用し、そのルールに基づいてサイズを設定します。

投稿された数行から、多くの問題があります。彼らは実際の問題を引き起こす可能性はほとんどありませんが、プログラムの残りの部分がどのように見えるのか不思議です。問題を解決するのに役立つ貴重な情報を残している可能性があります。

さらに助けが必要な場合は、正しくない動作を示すShort, Self Contained, Compilable and Executable, Example Program(SSCCE)を作成する必要があります。

+0

あなたはd)と同じです。しかし、私はc)についてはあまりよく分かりません。新しいJFrame()。getContentPane.getLayout()はJRotePane $ 1を返します。 – zedoo

+0

あなたが提案したいくつかの変更を行いました。その多くは、あなたが手前で提案した方法でしたが、問題を解決しようとする試みでは取り除かれました。 SSCCEを作って上に掲示しました。 –

関連する問題