2014-11-26 3 views
-1

Я работаю над Jframe netbeans IDE в основном я перетаскиваю вещи в форме, я хочу сделать группу checkboxes хотя бы двумя группами в одном фрейме, и каждая группа имеет много checkboxes Я хочу выберите несколько checkbox в каждой группе и верните значение отмеченных ящиков. Я прочитал, что группа кнопок не применима в этой ситуации, поскольку группа кнопок будет иметь только один выбор. Любой фрагмент кода или идея о том, как это сделать, очень ценятся.select many checkbox in checkboxgroup java swing

UPDATE

Найдено this образца это, как я хочу, чтобы мой флажок, чтобы вести себя только я не хочу, чтобы поместить их в таблице и нет компоненты таблицы в NetBeans IDE я могу перетащить для этой цели каких-либо идеи о том, как сделать это очень ценится

+0

'по крайней мере две группы в одном фрейме, и каждая группа имеет много флажков' - создайте JPanel с помощью' TitledBorder' и добавьте флажки на панель. Затем добавьте панель в рамку. Повторите для второй группы флажков. – camickr

+2

Или используйте 'JTable', для [пример] (http://stackoverflow.com/a/4528604/230513). – trashgod

+0

@camickr мой вопрос в том, как сделать флажок в группе, которая может выбрать или проверить несколько флажков, и я могу получить элементы с проверкой из этой группы –

ответ

4

Я согласен с Trashgod, JTable, вероятно, является хорошим местом для начала, другой вариант свернуть свой собственный ...

Каждый столбец «» является его собственный компонент и позволяет выберите несколько опций, но только в контексте этого «gr ппа»

CheckBoxes

import java.awt.BorderLayout; 
import java.awt.Container; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.FlowLayout; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.GridLayout; 
import java.awt.LayoutManager; 
import java.awt.Rectangle; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.ArrayList; 
import java.util.List; 
import javax.swing.JCheckBox; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.JViewport; 
import javax.swing.Scrollable; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class Test { 

    public static void main(String[] args) { 
     new Test(); 
    } 

    public Test() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new GridLayout(0, 2)); 
       frame.add(new CheckBoxGroup(new String[]{"Bananas", "Oranages", "Apples", "Pears"})); 
       frame.add(new CheckBoxGroup(new String[]{"Learn Archery", "Float in the dead sea", "Swing with a whale shark", "Sail the greek islands", "Go skydiving", "Dance in the rain", "Cycle through the Netherlands"})); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class CheckBoxGroup extends JPanel { 

     private JCheckBox all; 
     private List<JCheckBox> checkBoxes; 

     public CheckBoxGroup(String... options) { 
      checkBoxes = new ArrayList<>(25); 
      setLayout(new BorderLayout()); 
      JPanel header = new JPanel(new FlowLayout(FlowLayout.LEFT, 1, 1)); 
      all = new JCheckBox("Select All..."); 
      all.addActionListener(new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        for (JCheckBox cb : checkBoxes) { 
         cb.setSelected(all.isSelected()); 
        } 
       } 
      }); 
      header.add(all); 
      add(header, BorderLayout.NORTH); 

      JPanel content = new ScrollablePane(new GridBagLayout()); 
      content.setBackground(UIManager.getColor("List.background")); 
      if (options.length > 0) { 

       GridBagConstraints gbc = new GridBagConstraints(); 
       gbc.gridwidth = GridBagConstraints.REMAINDER; 
       gbc.anchor = GridBagConstraints.NORTHWEST; 
       gbc.weightx = 1; 
       for (int index = 0; index < options.length - 1; index++) { 
        JCheckBox cb = new JCheckBox(options[index]); 
        cb.setOpaque(false); 
        checkBoxes.add(cb); 
        content.add(cb, gbc); 
       } 

       JCheckBox cb = new JCheckBox(options[options.length - 1]); 
       cb.setOpaque(false); 
       checkBoxes.add(cb); 
       gbc.weighty = 1; 
       content.add(cb, gbc); 

      } 

      add(new JScrollPane(content)); 
     } 

     public class ScrollablePane extends JPanel implements Scrollable { 

      public ScrollablePane(LayoutManager layout) { 
       super(layout); 
      } 

      public ScrollablePane() { 
      } 

      @Override 
      public Dimension getPreferredScrollableViewportSize() { 
       return new Dimension(100, 100); 
      } 

      @Override 
      public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) { 
       return 32; 
      } 

      @Override 
      public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) { 
       return 32; 
      } 

      @Override 
      public boolean getScrollableTracksViewportWidth() { 
       boolean track = false; 
       Container parent = getParent(); 
       if (parent instanceof JViewport) { 
        JViewport vp = (JViewport) parent; 
        track = vp.getWidth() > getPreferredSize().width; 
       } 
       return track; 
      } 

      @Override 
      public boolean getScrollableTracksViewportHeight() { 
       boolean track = false; 
       Container parent = getParent(); 
       if (parent instanceof JViewport) { 
        JViewport vp = (JViewport) parent; 
        track = vp.getHeight() > getPreferredSize().height; 
       } 
       return track; 
      } 

     } 

    } 

} 

Что это не сделать, это возвращает список выбранных элементов, но как трудно было бы перебрать checkBoxesList, проверьте, выбран ли элемент или нет, извлеките его текст и добавьте его другому List и верните результат ...?

+0

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

+0

сэр. У меня есть еще одна вещь, чтобы уточнить, какой атрибут я должен изменить, чтобы сделать ориентацию горизонтальной. i означает, что список будет рядом. –

+0

Какой? Эти два списка бок о бок? – MadProgrammer