Руководство Java SWT Toggle Button
View more Tutorials:
В SWT, toggle является объектом класса Button со стилем SWT.TOGGLE.
Toggle button имеют два состояния выбраны и не выбраны. По умолчанию Toggle button не зависит от другой Toggle button.
// Create a radio button Button radio = new Button(parent, SWT.TOGGLE);
Toggle при запуске на различных операционных системах, часто различаются по интерфейсу. Ниже изображается Toggle button при работе на Windows XP и Windows 8:
Toggle Button (Windows XP):

Toggle Button (Windows 8)

Действительность показывает, что на Windows 8 у вас есть затруднения при отличии выбранной Toggle Button по сравнению с невыбранной Toggle Button. Одно из возможных решений этой проблемы это использование различных иконок для выбранного состояния и невыбранного.![]()
// Create a Toggle Button Button appleButton = new Button(parent, SWT.TOGGLE); appleButton.setText("Apple");
Вы также можете настроить иконки (icon) для toggle через метод setImage

InputStream input = RadioButtonDemo.class.getResourceAsStream("/org/o7planning/swt/icon/apple-16.png"); Image image = new Image(null, input); toggleButton.setImage(image);

В SWT, по умолчанию Toggle Button независимы друг от друга. Она отличается от поведения Radio Button, когда radio Button находятся в одном Composite или группе, если вы выбираете одну radio button, все другие radio button будут отменены.

ToggleButtonDemo.java
package org.o7planning.swt.togglebutton; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.o7planning.swt.utils.MyImageUtils; public class ToggleButtonDemo { public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); shell.setText("SWT Toggle Button (o7planning.org)"); RowLayout rowLayout = new RowLayout(); rowLayout.marginLeft = 10; rowLayout.marginTop = 10; rowLayout.spacing = 15; shell.setLayout(rowLayout); Group fruitGroup = new Group(shell, SWT.NONE); fruitGroup.setLayout(new RowLayout(SWT.HORIZONTAL)); Label label = new Label(fruitGroup, SWT.NONE); label.setText("Fruits: "); // Apple Button appleButton = new Button(fruitGroup, SWT.TOGGLE); appleButton.setText("Apple"); Image appleIcon = MyImageUtils.getImage(display, "/org/o7planning/swt/icon/apple-16.png"); appleButton.setImage(appleIcon); // Grape Button grapeButton = new Button(fruitGroup, SWT.TOGGLE); grapeButton.setText("Grape"); Image grapeIcon = MyImageUtils.getImage(display, "/org/o7planning/swt/icon/grape-16.png"); grapeButton.setImage(grapeIcon); // Banana Button bananaButton = new Button(fruitGroup, SWT.TOGGLE); bananaButton.setText("Banana"); Image bananaIcon = MyImageUtils.getImage(display, "/org/o7planning/swt/icon/banana-16.png"); bananaButton.setImage(bananaIcon); shell.setSize(400, 250); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); } }
Запуск примеров (Посмотреть на Windows XP и Windows 8)


Следующий пример обрабатывает событие, когда пользователь выбирает Toggle button


RadioButtonEventDemo.java
package org.o7planning.swt.togglebutton; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; public class ToggleButtonEventDemo { public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); shell.setText("SWT Toggle Button (o7planning.org)"); RowLayout rowLayout = new RowLayout(SWT.VERTICAL); rowLayout.marginLeft = 10; rowLayout.marginTop = 10; rowLayout.spacing = 15; shell.setLayout(rowLayout); // Composite Composite composite = new Composite(shell, SWT.NONE); composite.setLayout(new RowLayout(SWT.HORIZONTAL)); Label label = new Label(composite, SWT.NONE); label.setText("Select Fruits: "); // Apple Button toggleApple = new Button(composite, SWT.TOGGLE); toggleApple.setText("Apple"); // Grape Button toggleGrape = new Button(composite, SWT.TOGGLE); toggleGrape.setText("Grape"); // Banana Button toggleBanana = new Button(composite, SWT.TOGGLE); toggleBanana.setText("Banana"); Label labelAnswer = new Label(shell, SWT.NONE); labelAnswer.setForeground(display.getSystemColor(SWT.COLOR_BLUE)); SelectionListener selectionListener = new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { Button source = (Button) e.getSource(); if (source.getSelection()) { labelAnswer.setText("You select " + source.getText()); labelAnswer.pack(); } else { labelAnswer.setText("You deselect " + source.getText()); labelAnswer.pack(); } } }; toggleApple.addSelectionListener(selectionListener); toggleGrape.addSelectionListener(selectionListener); toggleBanana.addSelectionListener(selectionListener); shell.setSize(400, 250); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); } }

Как уже упоминалось выше, на Windows 8, пользователям иногда трудно различить между этими двумя состояниями выбран и не выбран Toggle Button. Решение это использовать различные иконки для различных состояний.

IconStateDemo.java
package org.o7planning.swt.togglebutton; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.o7planning.swt.utils.MyImageUtils; public class IconStateDemo { public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); shell.setText("SWT Toggle Button (o7planning.org)"); RowLayout rowLayout = new RowLayout(); rowLayout.marginLeft = 10; rowLayout.marginTop = 10; rowLayout.spacing = 15; shell.setLayout(rowLayout); Label label = new Label(shell, SWT.NONE); label.setText("Fruits: "); Image iconSelect = MyImageUtils.getImage(display, "/org/o7planning/swt/icon/apple-select-32.png"); Image iconDeselect = MyImageUtils.getImage(display, "/org/o7planning/swt/icon/apple-deselect-32.png"); // Apple Button appleButton = new Button(shell, SWT.TOGGLE); appleButton.setText("Apple"); appleButton.setImage(iconDeselect); appleButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { Button source = (Button) e.getSource(); if (source.getSelection()) { appleButton.setImage(iconSelect); } else { appleButton.setImage(iconDeselect); } } }); shell.setSize(400, 250); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); } }