2013-06-28 3 views
1

Я хочу создать вложенный список флажков. Если пользователь проверяет основной элемент, все подпункты под и проверяются. Если пользователь проверяет некоторые из подпунктов, то синий квадрат появляется внутри основного элемента.
Он должен выглядеть примерно так:
this.Вложенный CheckBox в Java

Как это сделать в Java 1.6? Могу ли я использовать качели или любую внешнюю библиотеку? Я хотел бы выбрать самый простой и быстрый способ достичь этого? Моя цель - создать только 1 уровень гнездования.

UPDATE Я хотел бы иметь расширение и функциональность коллапс, а

+0

Не знаю ни Библиотека для этого, но взять ButtonGroup идея написать свой собственный. – PeterMmm

ответ

2

Я хотел бы использовать JTree, и делают узлы с флажков. Логику расширения контрактов следует обрабатывать узлами.

0

1) Поскольку вам не нужны флажки с расширением/обрывом, вам может не понадобиться дерево. Просто добавьте флажки на панели в соответствующее положение, используя предпочтительный макет.

2) Создайте модель флажков, чтобы иметь соответствующие отношения родитель-ребенок.

3) Добавьте флажок actionListener в свой флажок и прослушайте проверку/удаление события. Когда родительский флажок установлен, проверьте все дочерние элементы и наоборот.

Пример кода

 import java.awt.BorderLayout; 
     import java.awt.Dimension; 

     import java.awt.Toolkit; 

     import java.awt.event.WindowAdapter; 

     import java.awt.event.WindowEvent; 

     import javax.swing.JFrame; 
     import javax.swing.UIManager; 


     public class NewJPanel extends javax.swing.JPanel { 

      /** Creates new form NewJPanel */ 
      public NewJPanel() { 
       initComponents(); 
      } 


      @SuppressWarnings("unchecked") 
      private void initComponents() { 
       jCheckBox1 = new javax.swing.JCheckBox(); 
       jCheckBox2 = new javax.swing.JCheckBox(); 
       jCheckBox3 = new javax.swing.JCheckBox(); 

       jCheckBox1.setText("Tall Things"); 
       jCheckBox1.addActionListener(new java.awt.event.ActionListener() { 
        public void actionPerformed(java.awt.event.ActionEvent evt) { 
         jCheckBox1ActionPerformed(evt); 
        } 
       }); 

       jCheckBox2.setText("Buildings"); 

       jCheckBox3.setText("Giants"); 

       javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); 
       this.setLayout(layout); 
       layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
        .addGroup(layout.createSequentialGroup() 
         .addComponent(jCheckBox1) 
         .addGap(0, 0, Short.MAX_VALUE)) 
        .addGroup(layout.createSequentialGroup() 
         .addContainerGap() 
         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
          .addComponent(jCheckBox2) 
          .addComponent(jCheckBox3)) 
         .addContainerGap(321, Short.MAX_VALUE)) 
       ); 
       layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
        .addGroup(layout.createSequentialGroup() 
         .addComponent(jCheckBox1) 
         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
         .addComponent(jCheckBox2) 
         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
         .addComponent(jCheckBox3) 
         .addGap(0, 232, Short.MAX_VALUE)) 
       ); 
      } 

      private void jCheckBox1ActionPerformed(java.awt.event.ActionEvent evt) { 
       jCheckBox2.setSelected(jCheckBox1.isSelected()); 
       jCheckBox3.setSelected(jCheckBox1.isSelected()); 
      } 


      private javax.swing.JCheckBox jCheckBox1; 
      private javax.swing.JCheckBox jCheckBox2; 
      private javax.swing.JCheckBox jCheckBox3; 
      public static void main(String[] args) { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 

        JFrame frame = new JFrame(); 
        frame.setSize(new Dimension(400,200)); 
        frame.getContentPane().setLayout(new BorderLayout()); 
        frame.getContentPane().add(new NewJPanel()); 
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 
        Dimension frameSize = frame.getSize(); 
        if (frameSize.height > screenSize.height) { 
         frameSize.height = screenSize.height; 
        } 
        if (frameSize.width > screenSize.width) { 
         frameSize.width = screenSize.width; 
        } 
        frame.setLocation((screenSize.width - frameSize.width)/2, (screenSize.height - frameSize.height)/2); 
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }