codestory

Die Anleitung zu Java SWT Toggle Button

  1. SWT Toggle Button
  2. Das Beispiel mit Toggle Button 
  3. Die Event-Behandlung für Toggle Button 
  4. Verschiedene Icon für verschiedene Zustände verwenden

1. SWT Toggle Button

Im SWT isttoggle ein Objekt der class Button mit dem Stil vom SWT.TOGGLE.
Toggle button hat 2 Zustände : gewählt und nichtgewählt. Nach dem Standard sind die Toggle Button selbstständig, unabhängig von den anderen Toggle Button
// Create a radio button

Button radio = new Button(parent, SWT.TOGGLE);
Die Toggle , die in die unterschiedlichen Betriebssystem laufen, haben die verschiedenen Schnittestelle. Folgend ist das Bild der Toggle Button auf den Betriebssystem von Windows XP und Windows 8:
Toggle Button (Windows XP):
Toggle Button (Windows 8)
Auf Windows 8 treffen Sie nach der Praxis die Schwierigkeit bei der Unterscheidung zwischen Toogle Button mit dem gewählten Zustand und Toggle Button mit dem nichtgewählten Zustand. Eine Maßnahme für die Problemlösung ist die Benutzung der verschiedenen Icon für die Zustand von gewählt und nichtgewählt
// Create a Toggle Button

Button appleButton = new Button(parent, SWT.TOGGLE);
appleButton.setText("Apple");
Sie können die Icon für Toggle durch die method setImage. setzen
InputStream input
    = RadioButtonDemo.class.getResourceAsStream("/org/o7planning/swt/icon/apple-16.png");
Image image = new Image(null, input);

toggleButton.setImage(image);

2. Das Beispiel mit Toggle Button 

Im SWT sind die Toggle Button standardmäßig in dem unterschiedlichen Zustand. Es ändert mit der Behandlung von der Radio Button. Falls die Radio Button in einer gleichen Composite oder Group gesetzt werden: Wenn Sie einen radio button wählen, verlieren die anderen radio button die Wahlmöglichkeiten
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();
    }

}
Führen Sie das Beispiel (Sehen Sie auf Windows XP & Windows 8)

3. Die Event-Behandlung für Toggle Button 

Das Beispiel stellt die Behandlung der Ereignis dar wenn der Benutzer die Toggle Button klicken
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();
    }

}

4. Verschiedene Icon für verschiedene Zustände verwenden

Wie oben erwähnt unterscheidet der Benutzer auf Windows 8 schwierig die 2 Zustände von gewählt und nichtgewählt der Toggle Button. Die Maßnahme ist die Benutzung der unterschiedlichen Icon für die unterschiedlichen Zustände
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();
    }

}