2015-12-07 2 views
1

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

код:

package demo; 

import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Shell; 
import org.eclipse.swt.widgets.Button; 
import org.eclipse.swt.SWT; 

public class example { 

    protected Shell shell; 

    /** 
    * Launch the application. 
    * @param args 
    */ 
    public static void main(String[] args) { 
     try { 
      example window = new example(); 
      window.open(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    /** 
    * Open the window. 
    */ 
    public void open() { 
     Display display = Display.getDefault(); 
     createContents(); 
     shell.open(); 
     shell.layout(); 
     while (!shell.isDisposed()) { 
      if (!display.readAndDispatch()) { 
       display.sleep(); 
      } 
     } 
    } 

    /** 
    * Create contents of the window. 
    */ 
    protected void createContents() { 
     shell = new Shell(); 
     shell.setSize(450, 300); 
     shell.setText("SWT Application"); 

     Button btnRadioButton = new Button(shell, SWT.RADIO); 
     btnRadioButton.setBounds(83, 10, 90, 16); 
     btnRadioButton.setText("Radio Button"); 

     Button btnRadioButton_1 = new Button(shell, SWT.RADIO); 
     btnRadioButton_1.setBounds(55, 86, 90, 16); 
     btnRadioButton_1.setText("Radio Button"); 

     Button btnRadioButton_2 = new Button(shell, SWT.RADIO); 
     btnRadioButton_2.setBounds(179, 158, 90, 16); 
     btnRadioButton_2.setText("Radio Button"); 

     Button btnRadioButton_3 = new Button(shell, SWT.RADIO); 
     btnRadioButton_3.setBounds(293, 65, 90, 16); 
     btnRadioButton_3.setText("Radio Button"); 

     Button button = new Button(shell, SWT.RADIO); 
     button.setText("Radio Button"); 
     button.setBounds(303, 103, 90, 16); 

     Button button_1 = new Button(shell, SWT.RADIO); 
     button_1.setText("Radio Button"); 
     button_1.setBounds(189, 196, 90, 16); 

    } 
} 

Я хочу радио кнопки 1,2 и 3 должны быть связаны так только один из них может быть выбран одновременно. Но я бы хотел, чтобы 4,5 и 6 были в отдельной группе и т. Д.

Как я могу исправить это, спасибо?

Пример использования:

Ответ Вопрос один с помощью переключателей 1, 2 и 3

Ответ Вопрос два с помощью переключателей 4, 5 и 6

т.д.

ответ

1

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

shell = new Shell(); 
    shell.setSize(450, 300); 
    shell.setText("SWT Application"); 

    Button btnRadioButton = new Button(shell, SWT.RADIO); 
    btnRadioButton.setBounds(0, 10, 90, 16); 
    btnRadioButton.setText("Radio Button"); 

    Button btnRadioButton_1 = new Button(shell, SWT.RADIO); 
    btnRadioButton_1.setBounds(0, 30, 90, 16); 
    btnRadioButton_1.setText("Radio Button"); 

    Button btnRadioButton_2 = new Button(shell, SWT.RADIO); 
    btnRadioButton_2.setBounds(0, 50, 90, 16); 
    btnRadioButton_2.setText("Radio Button"); 

    Composite composite = new Composite(shell, SWT.NULL); 
    composite.setBounds(0, 70, 300, 200); 
    composite.setLayout(new RowLayout()); 

    Button btnRadioButton_3 = new Button(composite, SWT.RADIO); 
    btnRadioButton_3.setBounds(0, 0, 90, 16); 
    btnRadioButton_3.setText("Radio Button"); 

    Button button = new Button(composite, SWT.RADIO); 
    button.setText("Radio Button"); 
    button.setBounds(0, 20, 90, 16); 

    Button button_1 = new Button(composite, SWT.RADIO); 
    button_1.setText("Radio Button"); 
    button_1.setBounds(0, 40, 90, 16); 
+0

как я могу следовать этому примеру группировать радиокнопки, описанных выше, например, btnRadioButton, btnRadioButton_1 и btnRadioButton_2 – Presenter

+0

Только что отредактировал мой ответ. – andrucz

+0

Когда я пытаюсь сделать это, последние три переключателя становятся невидимыми – Presenter

0

Вы должны использовать CheckBoxGroup.

Класс CheckboxGroup используется для группировки набора флажков . Точно одна кнопка флажка в группе CheckboxGroup может находиться в состоянии «on» в любой момент времени. Нажатие любой кнопки устанавливает свое состояние в «включено» и заставляет любую другую кнопку, которая находится в состоянии «включено», в состояние «выключено» .

Следующий пример кода создает новую группу флажок с тремя флажков:

Пример для AWT:

CheckboxGroup cbg = new CheckboxGroup(); 
add(new Checkbox("one", cbg, true)); 
add(new Checkbox("two", cbg, false)); 
add(new Checkbox("three", cbg, false)); 

Для Качели вы должны использовать ButtonGroup

//In initialization code: 
//Create the radio buttons. 
JRadioButton birdButton = new JRadioButton(birdString); 
birdButton.setMnemonic(KeyEvent.VK_B); 
birdButton.setActionCommand(birdString); 
birdButton.setSelected(true); 

JRadioButton catButton = new JRadioButton(catString); 
catButton.setMnemonic(KeyEvent.VK_C); 
catButton.setActionCommand(catString); 

JRadioButton dogButton = new JRadioButton(dogString); 
dogButton.setMnemonic(KeyEvent.VK_D); 
dogButton.setActionCommand(dogString); 

JRadioButton rabbitButton = new JRadioButton(rabbitString); 
rabbitButton.setMnemonic(KeyEvent.VK_R); 
rabbitButton.setActionCommand(rabbitString); 

JRadioButton pigButton = new JRadioButton(pigString); 
pigButton.setMnemonic(KeyEvent.VK_P); 
pigButton.setActionCommand(pigString); 

//Group the radio buttons. 
ButtonGroup group = new ButtonGroup(); 
group.add(birdButton); 
group.add(catButton); 
group.add(dogButton); 
group.add(rabbitButton); 
group.add(pigButton); 

И, наконец, для SWT вы можете использовать Composite

public class RadioButtonComposite { 
    public static void main(String[] args) { 
    final Display display = new Display(); 
    final Shell shell = new Shell(display); 
    shell.setLayout(new FillLayout()); 
    Composite composite = new Composite(shell, SWT.NULL); 
    composite.setLayout(new RowLayout()); 

    Button mrButton = new Button(composite, SWT.RADIO); 
    mrButton.setText("Mr."); 
    Button mrsButton = new Button(composite, SWT.RADIO); 
    mrsButton.setText("Mrs."); 
    Button msButton = new Button(composite, SWT.RADIO); 
    msButton.setText("Ms."); 
    Button drButton = new Button(composite, SWT.RADIO); 
    drButton.setText("Dr."); 

    shell.open(); 
    // Set up the event loop. 
    while (!shell.isDisposed()) { 
     if (!display.readAndDispatch()) { 
     // If no more entries in event queue 
     display.sleep(); 
     } 
    } 
    display.dispose(); 
    } 

} 
+0

Как я могу следовать этому примеру, чтобы группировать переключатели, описанные выше, например.btnRadioButton, btnRadioButton_1 и btnRadioButton_2 – Presenter

+0

@Presenter Посмотрите на мое редактирование, как использовать группу buttongroup –

+0

Вы уже использовали разные типы кнопок. Я хочу использовать переключатели SWT, знаете ли вы, как это сделать? – Presenter

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