2013-03-12 4 views
0

У меня есть серия переключателей, сгенерированных в виде массива и отображаемых в jPanel.действие при изменении состояния компонента

Я хочу, чтобы ряд флажков во второй панели был включен, когда переключатели находятся в выходном состоянии, но не на входе (вход или выход - это выбор радио).

Я хочу вызвать метод проверки, когда какое-либо из состояний радиообмена изменяется, но не знает, как это сделать, поскольку они созданы в массиве.

В настоящее время метод вызывается только при нажатии кнопки переключателя.

package my.ArduinoGUI; 

import java.awt.BorderLayout; 
import java.awt.Container; 
import java.awt.GridLayout; 

public class ArduinoGUI extends javax.swing.JFrame { 

public ArduinoGUI() { 
    initCustomComponents(); 
    initComponents(); 
} 

/** 
* This method is called from within the constructor to initialize the form. 
* WARNING: Do NOT modify this code. The content of this method is always 
* regenerated by the Form Editor. 
*/ 
@SuppressWarnings("unchecked") 
// <editor-fold defaultstate="collapsed" desc="Generated Code"> 
private void initComponents() { 

    buttonGroup1 = new javax.swing.ButtonGroup(); 
    jPanel1 = new javax.swing.JPanel(); 
    digitalPinPanel = new javax.swing.JPanel(new GridLayout(0, 3)); 
    jPanel3 = new javax.swing.JPanel(new GridLayout(0, 1)); 
    jPanel2 = new javax.swing.JPanel(); 

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

    jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Outputs")); 
    jPanel1.setName("Outputs"); // NOI18N 

    javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); 
    jPanel1.setLayout(jPanel1Layout); 
    jPanel1Layout.setHorizontalGroup(
     jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGap(0, 209, Short.MAX_VALUE) 
    ); 
    jPanel1Layout.setVerticalGroup(
     jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGap(0, 106, Short.MAX_VALUE) 
    ); 

    digitalPinPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Digital Pin State")); 
    digitalPinPanel.addMouseListener(new java.awt.event.MouseAdapter() { 
     public void mouseReleased(java.awt.event.MouseEvent evt) { 
      digitalPinPanelMouseReleased(evt); 
     } 
    }); 
    digitalPinLabelArray = new javax.swing.JLabel[digitalPinTotal]; 
    digitalPinRadioButtonArray = new javax.swing.JRadioButton[digitalPinTotal][2]; 
    digitalPinGroupArray = new javax.swing.ButtonGroup[digitalPinTotal]; 
    for(int x = 0; x < digitalPinTotal ; x++) { 
     digitalPinGroupArray[x] = new javax.swing.ButtonGroup(); // populate button group 
     digitalPinLabelArray[x] = new javax.swing.JLabel(); // populate label array 
     digitalPinLabelArray[x].setText("Pin " + (x +2)); 
     digitalPinPanel.add(digitalPinLabelArray[x]); // add label to panel 
     for(int y = 0; y < 2; y++){ 
      digitalPinRadioButtonArray[x][y] = new javax.swing.JRadioButton(); // populate radio button array 
      if (y == 0) {digitalPinRadioButtonArray[x][y].setText("Input");} 
      if (y == 1) {digitalPinRadioButtonArray[x][y].setText("Output"); digitalPinRadioButtonArray[x][y].setSelected(true); 
      } 

      digitalPinGroupArray[x].add(digitalPinRadioButtonArray[x][y]); // assign radio buttons to group 
      digitalPinPanel.add(digitalPinRadioButtonArray[x][y]); // add buttons to panel 
     } 

    } 

    jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder("Generated Boxes")); 
    digitalPinOutputArray = new javax.swing.JCheckBox[digitalPinTotal]; 

    for(int x = 0; x < digitalPinTotal ; x++) { 
     digitalPinOutputArray[x] = new javax.swing.JCheckBox(); 
     digitalPinOutputArray[x].setText("Output Pin " + (x+2)); 

     jPanel3.add(digitalPinOutputArray[x]); 

    } 

    jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("Analog Pin State")); 

    javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); 
    jPanel2.setLayout(jPanel2Layout); 
    jPanel2Layout.setHorizontalGroup(
     jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGap(0, 126, Short.MAX_VALUE) 
    ); 
    jPanel2Layout.setVerticalGroup(
     jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGap(0, 0, Short.MAX_VALUE) 
    ); 

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
    getContentPane().setLayout(layout); 
    layout.setHorizontalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(layout.createSequentialGroup() 
      .addContainerGap() 
      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) 
       .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
       .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
      .addGap(18, 18, 18) 
      .addComponent(digitalPinPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 159, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
      .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
      .addContainerGap()) 
    ); 
    layout.setVerticalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(layout.createSequentialGroup() 
      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) 
       .addGroup(layout.createSequentialGroup() 
        .addGap(23, 23, 23) 
        .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, 199, Short.MAX_VALUE) 
        .addGap(18, 18, 18) 
        .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
       .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() 
        .addContainerGap() 
        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
         .addComponent(digitalPinPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
         .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) 
      .addContainerGap()) 
    ); 

    digitalPinPanel.getAccessibleContext().setAccessibleName("DigitalPins"); 

    pack(); 
}// </editor-fold> 

private void digitalPinPanelMouseReleased(java.awt.event.MouseEvent evt) { 

// if output selected enable checkbox otherwise disable it 
    for (int x = 0; x < digitalPinTotal; x++) { 

     if (digitalPinRadioButtonArray[x][0].isSelected() == true) { 
      digitalPinOutputArray[x].setEnabled(false); 
     } 

     if (digitalPinRadioButtonArray[x][1].isSelected() == true) { 
      digitalPinOutputArray[x].setEnabled(true); 
     } 

    } 

} 

/** 
* @param args the command line arguments 
*/ 
public static void main(String args[]) { 
    /* Set the Nimbus look and feel */ 
    //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> 
    /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. 
    * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
    */ 
    try { 
     for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
      if ("Windows".equals(info.getName())) { 
       javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
       break; 
      } 
     } 
    } catch (ClassNotFoundException ex) { 
     java.util.logging.Logger.getLogger(ArduinoGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (InstantiationException ex) { 
     java.util.logging.Logger.getLogger(ArduinoGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (IllegalAccessException ex) { 
     java.util.logging.Logger.getLogger(ArduinoGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
     java.util.logging.Logger.getLogger(ArduinoGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } 
    //</editor-fold> 

    /* Create and display the form */ 
    java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      new ArduinoGUI().setVisible(true); 
     } 
    }); 
} 
// Variables declaration - do not modify 
private javax.swing.ButtonGroup buttonGroup1; 
private javax.swing.JPanel digitalPinPanel; 
private javax.swing.JPanel jPanel1; 
private javax.swing.JPanel jPanel2; 
private javax.swing.JPanel jPanel3; 
// End of variables declaration 
private int digitalPinTotal = 12; 
private int analogPinTotal = 8; 
private javax.swing.JCheckBox[] digitalPinOutputArray; 
private javax.swing.JRadioButton[][] digitalPinRadioButtonArray; 
private javax.swing.ButtonGroup[] digitalPinGroupArray; 
private javax.swing.JLabel[] digitalPinLabelArray; 

private void initCustomComponents() { 
    //throw new UnsupportedOperationException("Not yet implemented"); 
    // create checkbox array 
} 
} 

ответ

1
digitalPinRadioButtonArray[x][y].addActionListener(new ActionListener() { 

       @Override 
       public void actionPerformed(ActionEvent e) { 
        // TODO Auto-generated method stub 
        if(e.getActionCommand().equals("Output")) 
          { 
            digitalPinOutputArray[2].setSelected(true); 
          } 

       } 
      }); 

попробовать это

+0

Спасибо, я просто работал, что добавление слушателя действия для каждого RadioButton, как он будет создан хорошо работает. Спасибо за ваш быстрый ответ. – Zac

Смежные вопросы