2) दोनों को समान चौड़ाई (इसलिए दोनों चौड़ाई से अधिकतम) को कैसे नियंत्रित किया जाए, क्या दोनों की चौड़ाई के बीच किसी प्रकार का लिंक बनाना संभव है? मैं विशेष रूप से एफएक्सएमएल के लिए एक सुरुचिपूर्ण समाधान की तलाश में हूं।
ऐसा लगता है कि डिफ़ॉल्ट रूप से, सूची दृश्य में यह अधिकतम विजिद्ध है, लेकिन कॉम्बोबॉक्स में इसकी प्रारंभिक आइटम सूची की चौड़ाई के लिए अधिकतम अधिकतम चौड़ाई है। इन नियंत्रणों को एक ही चौड़ाई बनाने के लिए, इसे करने का सबसे आसान तरीका उन्हें लेआउट मैनेजर (जैसा आपने किया है - VBox) में रखा है और फिर कॉम्बोबॉक्स के maxWidth को अनलॉक करें।
कोड में आप यह कर सकते हैं:
comboBox.setMaxWidth(Double.MAX_VALUE);
FXML में अपने ComboBox तत्व को attibute परिभाषा निम्नलिखित जोड़ें:
maxWidth="Infinity"
आप जॉन ग्रे की बाइंडिंग समाधान का उपयोग कर सकते हैं, लेकिन मुझे लगता है अधिक सुरुचिपूर्ण से ऊपर।
1) मैं कैसे प्राप्त कर सकता हूं कि कॉम्बोबॉक्स और लिस्टव्यू दोनों की चौड़ाई के आकार के आकार में हैं?
मुझे लगता है कि आप यहां क्या पूछ रहे हैं कि combobox और listview को केवल उतनी ही जगह लेनी चाहिए जितनी उन्हें चाहिए और अब नहीं। यह है, मैं थोड़ा मुश्किल मानता हूं, और जावाएफएक्स मंच इस के लिए बहुत अधिक समर्थन प्रदान नहीं करता है।
न्यूनतम आवश्यक सूची में सूची बॉक्स के आकार को ठीक करने के लिए यहां कुछ नमूना कोड दिया गया है।
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.scene.*;
import javafx.scene.control.ComboBox;
import javafx.scene.control.ListView;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Priority;
import javafx.stage.Stage;
public class GridControlWidths extends Application {
public static void main(String[] args) throws Exception { launch(args); }
@Override public void start(Stage stage) {
ComboBox<String> comboBox = new ComboBox<String>(FXCollections.observableArrayList("item 1", "item 2"));
comboBox.setPromptText("the prompt text");
ListView<String> list = new ListView<String>(FXCollections.observableArrayList ("blue", "red"));
// layout the controls in a grid with appropriate constraints.
GridPane grid = new GridPane();
grid.add(comboBox, 0, 0);
grid.add(list, 0, 1);
grid.setVgrow(list, Priority.ALWAYS); // make the list grow vertically as much as possible
// unclamp the max width of the combo box.
comboBox.setMaxWidth(Double.MAX_VALUE);
// display the scene.
stage.setScene(new Scene(grid, 200, 300));
stage.show();
// set the prefWidth of the listview based on the list cells (allowing 8 pixels for padding of the cells).
double maxWidth = 0;
for (Node n: list.lookupAll(".text")) {
maxWidth = Math.max(maxWidth, n.getBoundsInParent().getWidth() + 8);
}
list.setPrefWidth(maxWidth);
}
}
Fwiw, मैं एक सिफारिश की दृष्टिकोण लगता है कि आप बस कुछ ही आइटम नहीं हैं बल्कि एक ListView या कोई ComboBox एक ChoiceBox के बजाय का उपयोग करने से एक VBox में अपने आइटम डाल करने के लिए करने के लिए है जब, इस तरह आप की जरूरत नहीं है सेल आत्मनिरीक्षण करने के लिए और पसंदीदा चौड़ाई को हर समय अद्यतन करें क्योंकि लेआउट प्रबंधक और नियंत्रण आपके लिए इसका ख्याल रखेंगे। ListView को वर्चुअलाइज्ड सूची के मामले को संभालने के लिए अनुकूलित किया गया है जिसमें हजारों मनमाने ढंग से आकार वाले आइटम हो सकते हैं जिसके लिए आप आसानी से लेआउट चौड़ाई की गणना नहीं कर पा रहे हैं, यही कारण है कि मुझे लगता है कि यह डिफ़ॉल्ट नियंत्रण आकार देने वाले व्यवहार के साथ आता है जो नहीं करता है यह संभवतः न्यूनतम आकार के आकार में हो सकता है। आम तौर पर जब सूची सूची का उपयोग करते हैं तो आप सूची के लिए एक उचित prefWidth चुनेंगे और सूची में सेट करेंगे, ऊपर दिए गए उदाहरण के रूप में आइटम्स को आत्मनिरीक्षण करने के बजाय देखें।
इसके अतिरिक्त, आपके पास छवि है जहां कुछ प्रॉम्प्ट टेक्स्ट क्लिप किया गया है, जावाफैक्स में एक बग होने के लिए (मेरे लिए) प्रतीत होता है, जहां यह कॉम्बोबॉक्स नियंत्रण टेक्स्ट के लिए कॉम्बोबॉक्स नियंत्रण के लिए पसंदीदा चौड़ाई की सही गणना नहीं करता है कॉम्बोबॉक्स आइटम टेक्स्ट से बड़ा। चूंकि कॉम्बोबॉक्स वर्तमान में एक नया नियंत्रण है और मैंने जावाएफएक्स नियंत्रण के पहले के निर्माण में इस तरह के मुद्दों को देखा है और वे तय हो गए हैं, मैं उम्मीद करता हूं कि कॉम्बोबॉक्स के लिए पसंदीदा चौड़ाई गणना जल्द ही तय हो जाएगी।
आपके उत्तर के लिए धन्यवाद, मैक्सविड्थ पुरानी स्थिति की तुलना में आसान/बेहतर हो गया है, हालांकि अभी भी मूल्यों का अनुमान लगाना है): मुझे JavaFX द्वारा किए गए कुछ स्वचालित समायोजन की आवश्यकता होगी): और संपत्ति की जानकारी के लिए धन्यवाद! वास्तव में WPF की तरह ;-) –
और ऐसे मामलों के लिए और फिर अपने प्रोजेक्ट में fxml निर्यात करने के लिए सीनबिल्डर का उपयोग करने के लिए बेहतर है। – 4lex1v