Ich habe erwartet, dass wenn ich Alt + mnemonic verwende, der entsprechende Radioknopf fokussiert und ausgewählt wird. Meine Erwartungen basieren auf meinem Wissen darüber, wie Mnemotechniken in Swing funktionieren. Sind meine Erwartungen falsch?Wie funktioniert Mnemonik mit Optionsfeldern?
In meinem Beispielcode unten setze ich die Nummer jedes Radio-Button, um die mnemonic zu sein.
- "Option 1" wird ausgewählt, wenn das Programm startet.
- Wenn ich Alt + 3 benutze, piept das Programm bei mir, alle Mnemonics werden unterstrichen und "Option 3" wird fokussiert, aber NICHT ausgewählt. Die GUI sieht nun wie folgt aus:
- Wenn ich nur 2 Typ „Option 2 fokussiert wird, aber nicht ausgewählt
hier. der Code ist:
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.scene.image.*;
import javafx.scene.input.*;
import javafx.scene.effect.*;
import javafx.scene.paint.*;
import javafx.beans.value.*;
import javafx.geometry.*;
import javafx.event.*;
public class RadioButtonSSCCE extends Application
{
public Parent createScene()
{
ToggleGroup group = new ToggleGroup();
RadioButton rb1 = new RadioButton("Option _1");
rb1.setUserData("Option 1 selected");
rb1.setToggleGroup(group);
RadioButton rb2 = new RadioButton("Option _2");
rb2.setUserData("Option 2 selected");
rb2.setToggleGroup(group);
RadioButton rb3 = new RadioButton("Option _3");
rb3.setUserData("Option 3 selected");
rb3.setToggleGroup(group);
VBox root = new VBox(5);
root.setAlignment(Pos.CENTER);
root.getChildren().addAll(rb1, rb2, rb3);
ChangeListener<Toggle> cl = new ChangeListener<Toggle>()
{
@Override
public void changed(ObservableValue<? extends Toggle> ov, Toggle old_toggle, Toggle new_toggle)
{
if (group.getSelectedToggle() != null)
{
String text = group.getSelectedToggle().getUserData().toString();
System.out.println(text);
}
}
};
group.selectedToggleProperty().addListener(cl);
rb1.setSelected(true);
return root;
}
@Override
public void start(Stage primaryStage)
{
Scene scene = new Scene(createScene(), 125, 125);
primaryStage.setScene(scene);
primaryStage.setTitle("Radio Button SSCCE");
primaryStage.show();
}
public static void main(String[] args)
{
launch(args);
}
}
ich habe, dass die mnemonic, um gefunden zu berufen ich muss:
- Drücken Sie die Alt-Taste und lassen Sie sie wieder los. Jetzt ist die Mnemonic jedes Radiobuttons unterstrichen.
- drücken Sie die Nummer und der Radiobutton wird fokussiert. Allerdings muss ich jetzt die Leertaste verwenden, um das Optionsfeld auszuwählen.
Warum muss ich die Leertaste drücken? Sollte der Radiobutton beim Drücken der Mnemonik nicht ausgewählt sein?
Warum kann ich nicht einfach Alt + Mnemonic als einzelne Tastenkombination verwenden, um einen Radiobutton auszuwählen?
Ist mein Code falsch?
Edit:
Die Aktion ist der Schlüssel das Optionsfeld auswählen. Ich habe eine generische Aktion von allen Tasten geteilt werden:
EventHandler<ActionEvent> onAction = new EventHandler<ActionEvent>()
{
@Override
public void handle(ActionEvent e)
{
RadioButton button = (RadioButton)e.getSource();
button.setSelected(true);
}
};
rb1.setOnAction(onAction);
rb2.setOnAction(onAction);
rb3.setOnAction(onAction);
Da die Radiobuttons Teil einer Knopfgruppe ist wollte ich nicht die Möglichkeit, eine Taste zu deaktivieren.
Sie sind auf die dunkle Seite gegangen, wie es scheint. ;) –
Es scheint so, als würden die Mnemotechniken Aktionsereignisse auf den Optionsfeldern auslösen, aber das zwingt die Auswahl nicht wirklich dazu, sich zu ändern (ich kann nicht direkt testen, weil es auf meinem Mac als "Alt"). Das scheint jedoch nicht zu einer Änderung der Auswahl zu führen ... das könnte ein Fehler sein. –
@James_D Es wirkt auf diese Weise in JavaFX 2.2 und JavaFX 8, so scheint es, die Absicht zu sein. 'CheckBox' funktioniert genauso. – OttPrime