मैं उम्मीद कर रहा था कि जब मैं Alt + mnemonic का उपयोग करता हूं कि संबंधित रेडियो बटन केंद्रित और चयनित हो जाएगा। मेरी अपेक्षाएं स्विंग में कैसे काम करती हैं, इस बारे में मेरे ज्ञान पर आधारित हैं। क्या मेरी उम्मीद गलत है?रेडियो बटनों के साथ मनोनीत कैसे काम करते हैं
नीचे दिए गए मेरे उदाहरण कोड में मैंने प्रत्येक रेडियो बटन की संख्या को स्नेही होने के लिए सेट किया है।
- प्रोग्राम प्रारंभ होने पर "विकल्प 1" चुना जाता है।
- जब मैं Alt + 3 का उपयोग करता हूं, तो प्रोग्राम मेरे ऊपर बीप करता है, सभी निमोनिक्स रेखांकित हो जाते हैं और "विकल्प 3" केंद्रित हो जाता है लेकिन चयनित नहीं होता है। जीयूआई अब इस तरह दिखता है:
- मैं सिर्फ टाइप 2, "विकल्प 2 ध्यान केंद्रित हो जाता है, लेकिन नहीं चयनित
यहाँ। कोड है:
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);
}
}
मैं ने पाया है कि आदेश स्मरक आह्वान करने के लिए में मैं करने के लिए है:
- दबाएं और Alt कुंजी को छोड़ दें। अब प्रत्येक रेडियो बटन की नींबू रेखांकित है।
- संख्या दबाएं और रेडियो बटन केंद्रित हो जाता है। हालांकि, अब मुझे रेडियो बटन का चयन करने के लिए स्पेस बार का उपयोग करने की आवश्यकता है।
मुझे स्पेस बार को दबाए जाने की आवश्यकता क्यों है? क्या मनमोहक दबाए जाने पर रेडियो बटन का चयन नहीं किया जाना चाहिए?
इसके अलावा, मैं रेडियो बटन का चयन करने के लिए केवल एक कुंजी संयोजन के रूप में Alt + mnemonic का उपयोग क्यों नहीं कर सकता?
क्या मेरा कोड गलत है?
संपादित करें:
कार्रवाई रेडियो बटन का चयन करने के लिए महत्वपूर्ण है।
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);
के बाद से रेडियो बटन एक बटन समूह का हिस्सा हैं मैं एक बटन को अचयनित करने की क्षमता नहीं करना चाहता था: मैं एक सामान्य कार्रवाई सभी बटन द्वारा साझा किया जा करने के लिए बनाया।
आप ऐसा लगता है कि आप अंधेरे तरफ गए हैं। ;) –
ऐसा लगता है कि निमोनिक्स रेडियो बटन पर कार्रवाई की घटनाओं को निकाल दिया जाता है, लेकिन यह वास्तव में चयन को बदलने के लिए मजबूर नहीं करता है (मैं सीधे परीक्षण नहीं कर सकता, क्योंकि यह मेरे बारे में कुछ भी नहीं पहचानता है मैक "Alt" के रूप में)। ऐसा लगता है कि चयन को बदलने के लिए प्रतीत नहीं होता है ... यह एक बग हो सकता है। –
@James_D यह JavaFX 2.2 और JavaFX 8 में इस तरह से कार्य करता है, इसलिए यह इरादा प्रतीत होता है। 'चेकबॉक्स' वैसे ही काम करता है। – OttPrime