2017-06-20 5 views
0

特定のラジオボタンを選択すると、3つのJSpinnerと3つのJLabelを含むJPanelが表示されるようにする必要があります。Java - JRadioButtonが表示されるパネルを選択する

私はこのコードを書いた:条件付きならば、私はにこのコードを挿入

GroupLayout panelEstGroupLayout = new GroupLayout(panelEst); 

     panelEstGroupLayout.setHorizontalGroup(
       panelEstGroupLayout.createParallelGroup(Alignment.LEADING) 
       .addGroup 
       (
         panelEstGroupLayout.createSequentialGroup() 
         .addGap(5) 
         .addGroup 
         (
          panelEstGroupLayout.createParallelGroup(Alignment.TRAILING) 
          .addComponent(startGame) 
          .addComponent(boxTotal, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) 
         ) 
       ) 
       .addGroup 
       (
         panelEstGroupLayout.createSequentialGroup() 
         .addContainerGap() 
         .addGroup 
         (
           panelEstGroupLayout.createParallelGroup(Alignment.TRAILING) 
           .addGroup 
           (
             Alignment.LEADING, panelEstGroupLayout.createSequentialGroup() 
             .addGap(6) 
             .addComponent(heightLabel, GroupLayout.PREFERRED_SIZE, 74, GroupLayout.PREFERRED_SIZE) 
             .addPreferredGap(ComponentPlacement.UNRELATED) 
             .addComponent(widthLabel, GroupLayout.PREFERRED_SIZE, 74, GroupLayout.PREFERRED_SIZE) 
             .addGap(18) 
             .addComponent(minesLabel, GroupLayout.PREFERRED_SIZE, 74, GroupLayout.PREFERRED_SIZE) 
           ) 
           .addGroup 
           (
             Alignment.LEADING, panelEstGroupLayout.createSequentialGroup() 
             .addComponent(height, GroupLayout.PREFERRED_SIZE, 84, GroupLayout.PREFERRED_SIZE) 
             .addPreferredGap(ComponentPlacement.RELATED) 
             .addComponent(width, GroupLayout.PREFERRED_SIZE, 84, GroupLayout.PREFERRED_SIZE) 
             .addPreferredGap(ComponentPlacement.RELATED) 
             .addComponent(mines, GroupLayout.PREFERRED_SIZE, 84, GroupLayout.PREFERRED_SIZE) 
           ) 
         ) 
       ) 
     ); 
     panelEstGroupLayout.setVerticalGroup(
       panelEstGroupLayout.createParallelGroup(Alignment.LEADING) 
        .addGroup(panelEstGroupLayout.createSequentialGroup() 
         .addGap(5) 
         .addComponent(boxTotal, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) 
         .addGroup(panelEstGroupLayout.createParallelGroup(Alignment.LEADING) 
          .addGroup(panelEstGroupLayout.createSequentialGroup() 
           .addGap(74) 
           .addComponent(startGame)) 
          .addGroup(Alignment.TRAILING, panelEstGroupLayout.createSequentialGroup() 
           .addPreferredGap(ComponentPlacement.UNRELATED) 
           .addGroup(panelEstGroupLayout.createParallelGroup(Alignment.BASELINE) 
            .addComponent(heightLabel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
            .addComponent(widthLabel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
            .addComponent(minesLabel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
           .addPreferredGap(ComponentPlacement.RELATED) 
           .addGroup(panelEstGroupLayout.createParallelGroup(Alignment.BASELINE) 
            .addComponent(height) 
            .addComponent(width, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) 
            .addComponent(mines, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) 
           .addGap(43))) 
         .addGap(0)) 
      ); 

::私は、カスタムのJRadioButtonを選択すると

JRadioButton custom = new JRadioButton("Custom"); 
SpinnerModel spinnerModel = new SpinnerNumberModel(2, 0, 80, 1); 
JSpinner height = new JSpinner(spinnerModel); 
SpinnerModel spinnerModel2 = new SpinnerNumberModel(2, 0, 80, 1); 
JSpinner width = new JSpinner(spinnerModel2); 
SpinnerModel spinnerModelMine = new SpinnerNumberModel(1, 0, 99, 1); 
JSpinner mines = new JSpinner(spinnerModelMine); 

、このJPanelが表示されますif(custom.isSelected())が、それはdoesnの仕事はありません。どうして?

+3

[mcve]を入力してください。 – Berger

+1

ボタンが選択されているかどうかを確認するActionListenerが必要です。それ以外の場合、プログラムはifの時点でボタンが選択されているかどうかをチェックします。また、GroupLayoutは完全なパネルやフレームではない – XtremeBaumer

+0

[アクションリスナーの作成方法](https://docs.oracle.com/javase/tutorial/uiswing/events/actionlistener.html) – River

答えて

3

ラジオボタンのアクションリスナーを登録する必要があります。ラジオボタンのアクションリスナーを登録する必要があります。変更すると、ラジオボタンの状態に基づいてパネルを非表示にするか、表示/非表示にすることができます。

パネルを作成するときは、すぐに作成することができますが、必要になるまで非表示にすることができます。アクションが入った後にのみ作成することができます。個人的には、GUI要素の作成をコード全体に分散するのではなく、最初からすべての要素を作成することを好みます。

+1

私はコンポーネントを有効/無効にするというアイデアが好きで、hide/unhideが最適ではなく、起動時にすべてのコンポーネントを追加する必要があることに同意します。しかし、hide/unhideと同じ効果はカードレイアウトを使うことで実現でき、起動時にすべてのコンポーネントを追加することができます(GUIは 'pack()'を使って正しくサイズを設定できます)。 –

関連する問題