2010-11-29 23 views
1

マイコード:JPanelのサイズを変更しません

public MyConstructor() { 
    view = new JPanel(new GridLayout(3, 1)); 
    header = new JPanel(new GridLayout(2, 1));//2 ROWS 1 COLUMN 
    foot = new JLabel("Copyright..."); 
    content = new JPanel(); 
    info = new JLabel(""); 
    logo = new JLabel() { 

     BufferedImage img; 

     @Override 
     public void paint(Graphics g) { 
      try { 
       img = ImageIO.read(new File("logo.jpg")); 
      } catch (IOException e) { 
      } 
      g.drawImage(img, 0, 0, null); 
     } 
    }; 
    window.add(view); 
    header.add(logo); 
    header.add(info); 
    view.add(header); 
    view.add(content); 
    view.add(foot); 
    window.setLocation(width/2, 100); 
    window.setSize(width, height); 
    window.setPreferredSize(new Dimension(width, height)); 
    content.setSize(window.getWidth(), height-70); 
    content.setPreferredSize(new Dimension(window.getWidth(), height-70)); 
} 

「ウィンドウ」...クラスはJFrameの は私のクラスは他の人にスーパークラスになるだろう枠拡張されていないされ、サブクラスが継承パブリックコンテンツJPanel。私のスーパークラスでは、GridLayoutの3つのセクションの幅と高さを設定しようとしています。ロゴとインフォメーションコンポーネントの高さは70です...他のコンポーネント(ビュー、ヘッダー、情報、ロゴ)サブクラスがアクセスできないようにします。

アプリケーションが実行されると、ログイン用のウィンドウが表示され、正しく表示され、サイズが変更されます。サブクラスの1つのインスタンスにログインすると、ログインウィンドウが非表示になります。setVisible(false)

ただし、新しいウィンドウが表示される場合、JFrameは正しいサイズですが、ヘッダー、コンテンツ、およびフッターはcurrectサイズではありません。 各コンポーネントのサイズと推奨サイズを設定しようとしましたが、まだ動作していません...また、repaintを呼び出して検証/再検証を試みました

アイデアはありますか?

答えて

1

あなたのデザインが改善される可能性があります。なぜこれらの変数はスーパークラスの属性である必要がありますか?なぜあなたは必要なパネルを構築するメソッドと、それを追加するコンストラクタを持っていないだけで、それぞれのインスタンスに対して新しいパネルを得ることができますか?

実際、ヘッダーとフッターのクラスを作成し、同じヘッダーとフッターを取得するためにフレームをサブクラス化する代わりに、それらを再利用するだけではどうですか?

+0

私のデザインには再作業が必要だと思う。 – zcourts

0

コンポーネントをコンテナに追加し、コンポーネントを「ボトムアップ」する前に、適切なサイズを設定してみてください。そうでない場合は、pack()revalidate()repaint()などを呼び出して調整してください。

レイアウトマネージャでも、正しく使用していません。

また、スイングは吸う。 Netbeansを試してみてください、それはもう少し耐えられるようになります。手動で配置したりサイズを変更したりする必要があるときに役立ちます。

+1

IDEを使用してGUIを生成しないでください。自分でコードを書く方法を学ぶので、IDEではなくJavaを学習しています。 – camickr

+0

あなたはJavaの全てを嫌うのではないが、何かの理由で何らかの理由でSwingを使わなければならない:P – slezica

1

イメージをペイントするためにラベルをオーバーライドするのはなぜですか? setIcon()メソッドは、必要なときに、このメソッドは、複数回に

  • カスタムペイントを起動されますので、カスタムペイントコード内のファイルを読み込むことはありません
  • 何のためにあるのかである、で行われ

    1. paintComponent()メソッド。
  • 関連する問題