2017-06-20 62 views
0

我需要確保當我選擇一個特定的單選按鈕時,會出現一個包含三個JSpinner和三個JLabel的JPanel。Java - 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); 

當我選擇自定義一個JRadioButton,此JPanel應該出現:

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)) 
      ); 

我插入此代碼到如果與條件:if(custom.isSelected())但它不沒有工作。爲什麼?

+3

請提供[mcve]。 – Berger

+1

您需要一個ActionListener來檢查是否選中該按鈕。否則,程序會檢查你的if點是否被選中。又是一個'GroupLayout'不是一個完整的面板或框架或任何 – XtremeBaumer

+0

[如何寫一個動作監聽](https://docs.oracle.com/javase/tutorial/uiswing/events/actionlistener.html) – River

回答

3

你應該註冊一個動作監聽器單選按鈕,當它改變時,你就可以隱藏/取消隱藏或禁用/啓用基於單選按鈕狀態面板爲適當。

至於何時創建面板,您可以選擇立即創建面板,但在需要時將其隱藏/禁用。或者,您只能在動作進入後才能創建它。個人而言,我更喜歡在開始時創建所有元素,而不是在整個代碼中分佈GUI元素創建。

+1

我喜歡啓用/禁用組件的想法,並同意隱藏/取消隱藏不是最佳的,所有組件都應該在啓動時添加。但是,通過使用卡布局可以實現與隱藏/取消隱藏相同的效果,並且它允許在啓動時添加所有組件(因此可以使用'pack()'正確設置GUI大小)。 –