1

これが私のプログラムの外観であり、異なるレイアウトをどこで使用するべきかについて少し混乱しています。

Panel クラスを呼び出す Window クラスがあり、Panel クラスは InputPanel クラスと DisplayPanel クラスを呼び出します。私の InputPanel クラスは、私の DetailsPanel、CrimePanel、および ButtonPanel クラスを呼び出して、[入力] タブの下に表示される内容を構成します。ウィンドウ全体に BorderLayout を使用し、DetailsPanel (左側のパネル) と CrimePanel は GridLayout にするように言われました。

これは、次のことを行う必要があることを意味しますか?

  1. BorderLayout コードを Panel に配置し、GridLayout コードを CrimePanel と DetailsPanel に配置するか、
  2. BorderLayout コードを Window に、GridLayout コードを Panel に配置しますか?

代替テキスト http://img137.imageshack.us/img137/6422/93381955.jpg

4

3 に答える 3

5

さて、あなたの説明は少し紛らわしいです(または私は今日まだ疲れすぎているか、まだ十分なカフェインを持っていませんでした)。他の人からパネルクラスを「呼び出す」というあなたの概念も少し奇妙です。

しかし、私が見る限り、あなたの最初の選択肢は正しいものです。

一般に、実行時にオブジェクトをネストするだけなので、次のようになります。

InputPanel (has BorderLayout)
+--DetailsPanel (put in BorderLayout.WEST; has GridLayout)
|  +--nameLabel
|  +--nameTextField
|  +--...
+--CrimePanel (put in BorderLayout.NORTH; has GridLayout)
|  +--murderRadioButton
|  +--arsonRadioButton
|  +--...
+--ButtonPanel (put in BorderLayout.CENTER; has GridLayout)
   +--button

通常、これは適切なクラスのコンストラクターで行います。

public class InputPanel {
    public InputPanel() {
        this.setLayout(new BorderLayout());
        this.add(new DetailsPanel(), BorderLayout.WEST);
        this.add(new CrimePanel(), BorderLayout.NORTH);
        this.add(new ButtonPanel(), BorderLayout.CENTER);
    }
}

public class DetailsPanel {

    JLabel nameLabel;
    JTextField nameField;
    // ...

    public DetailsPanel() {
        this.setLayout(new GridLayout(5, 1));

        nameLabel = new JLabel("Name");
        nameField = new JTextField();
        // ...

        this.add(nameLabel);
        this.add(nameField);
        // ...
    }
}

...

ただし、ここに小さな問題があります。GridLayoutコンポーネントが複数の列にまたがることができないためDetailsPanel、左側の他のパネルもネストする必要がある場合があります。必要な機能を備えたシングルで逃げることができますGridBagLayout。または、他のパネルをそこにネストすることもできます。

DetailsPanel (has BorderLayout)
+--panel1 (has GridLayout with 2 rows, 1 column; put in BorderLayout.NORTH)
|  +--nameLabel
|  +--nameField
+--panel2 (has GridLayout with 3 rows, 2 columns; put in BorderLayout.CENTER)
   +--dayField
   +--dayLabel
   +--monthField
   +--...
于 2009-10-20T08:27:44.710 に答える
0

まず、JTabbedPaneをウィンドウに配置して、それぞれがJPanelで構成される2つのタブ(入力と表示)を含める必要があります。

Joannesが説明しているように、入力パネルはBorderLayoutを使用して細分化できます。もう1つの代替手段は、Java 6で導入されたGroupLayoutです。これは非常に強力ですが、頭を悩ませることは困難です。タブ全体を1つのパネルにレイアウトするために使用できます。

于 2009-10-20T08:56:30.020 に答える
0

あなたの説明から、オプション1が機能するはずです。入力JPanelにaBorderLayoutを指定し、詳細、犯罪、ボタンJPanel(それぞれ西、北、南)にGridLayoutsを付けます。

于 2009-10-20T08:24:00.703 に答える