2015-02-09 7 views
24

मैं डिफ़ॉल्ट जावाएफएक्स संवाद (javafx.scene.control.Dialog) शैली बनाने के लिए एक तरीका ढूंढ रहा हूं।स्टाइलिंग डिफ़ॉल्ट जावाएफएक्स संवाद

मैंने डायलॉगपेन प्राप्त करने और स्टाइलशीट जोड़ने की कोशिश की, लेकिन इसमें संवाद के केवल एक छोटे टुकड़े को शामिल किया गया। मैं केवल बाहरी सीएसएस फ़ाइल के साथ स्टाइल करना पसंद करूंगा और कोड पर स्टाइल क्लास जोड़ने के बिना। यह गन्दा दिखता है (हेडर, सामग्री, सामग्री पर अपनी सामग्री और अधिक ..)

मैंने पहले से ही बहुत कुछ गूंज लिया है और केवल नियंत्रण एफएक्स के लिए उदाहरण पाए हैं, लेकिन चूंकि jdk8_40 जावाएफएक्स के अपने संवाद हैं, अब मैं उनका उपयोग करता हूं।

कोई सुझाव?

संपादित करें:

के बाद जोस पेरेडा समाधान मैं अपने dialog.css बनाया था। मैं इसे यहां पोस्ट करूंगा क्योंकि इसमें पूरे संवाद को शामिल किया गया है और शायद कोई इसे & कॉपी करने की प्रतिलिपि बनाना चाहता है। नोट .dialog-pane पहले से ही एक दिया गया शैली क्लास नाम है, इसलिए आपको अपना स्वयं का आवेदन करने की आवश्यकता नहीं है। बेशक, जोसेस अधिक बढ़िया विस्तृत है।

.dialog-pane { 
    -fx-background-color: black; 
} 

.dialog-pane .label { 
    -fx-text-fill: white; 
} 

.dialog-pane:header .header-panel { 
    -fx-background-color: black; 
} 

.dialog-pane:header .header-panel .label { 
    -fx-font-style: italic; 
    -fx-font-size: 2em; 
} 

उत्तर

38

आप अपनी खुद की सीएसएस फ़ाइल के साथ अपने संवाद शैली दे सकते हैं, लेकिन उसके लिए आपको विचार यह है कि संवाद वास्तव में एक नया चरण है, एक नया दृश्य के साथ में लेने की जरूरत है, और रूट नोड एक DialogPane उदाहरण है ।

तो एक बार आप कुछ संवाद उदाहरण बनाने के लिए:

@Override 
public void start(Stage primaryStage) {   
    Alert alert = new Alert(AlertType.CONFIRMATION); 
    alert.setTitle("Confirmation Dialog"); 
    alert.setHeaderText("This is a Custom Confirmation Dialog"); 
    alert.setContentText("We override the style classes of the dialog"); 
    ... 
} 

आप अपने संवाद फलक का उपयोग करने और अपने खुद के शैली पत्रक और अपने खुद के वर्ग चयनकर्ता जोड़ सकते हैं:

DialogPane dialogPane = alert.getDialogPane(); 
dialogPane.getStylesheets().add(
    getClass().getResource("myDialogs.css").toExternalForm()); 
dialogPane.getStyleClass().add("myDialog"); 

अब चाल जानना है सभी नियम Dialog स्टाइल शीट डिफ़ॉल्ट रूप से कार्यान्वित किया गया है।

और यह एक कठिन काम है ... क्योंकि वे सभी नियमित नियंत्रणों के लिए modena.css फ़ाइल में नहीं हैं। इसके विपरीत, वे modena.bss फ़ाइल में पाए जाते हैं, जो कि निजी पैकेज के तहत jfxrt.jar में स्थित एक बाइनरी फ़ाइल है।

.myDialog{ 
    -fx-background-color: #f9d900; 
} 
.myDialog > *.button-bar > *.container{ 
    -fx-background-color: #a9e200; 
} 
.myDialog > *.label.content{ 
    -fx-font-size: 14px; 
    -fx-font-weight: bold; 
} 
.myDialog:header *.header-panel{ 
    -fx-background-color: #a59c31; 
} 
.myDialog:header *.header-panel *.label{ 
    -fx-font-size: 18px; 
    -fx-font-style: italic; 
    -fx-fill: #292929; 
} 

और आप अपने स्टाइल संवाद होगा:

Styled dialog

कुछ खुदाई के बाद मैं इतना अपने कस्टम myDialogs.css फ़ाइल कुछ इस तरह दिखेगा, उन नियमों को पाने के लिए प्रबंधित किया है

ध्यान दें कि निजी पैकेज के तहत एक बीएसएस फ़ाइल होने के नाते, ये चयनकर्ता भविष्य के रिलीज में बिना किसी सूचना के बदल सकते हैं।

संपादित

मैं सिर्फ पाया है कि .dialog-pane चयनकर्ता पहले से ही, पिछले 8u40 early versions में modena.css का हिस्सा है ताकि आप सभी चयनकर्ताओं और वहाँ संवाद फलक के लिए लागू नियमों पा सकते हैं।

+0

मैं पहले से ही आपके एक और पोस्ट पर ठोकर खाई लेकिन सोचा कि यह स्टाइलक्लास नाम "कस्टम" की वजह से जावाएफएक्स संवाद से संबंधित नहीं था। जब भी मैंने आपके उदाहरण की कोशिश की, तो मैंने काम नहीं किया लेकिन फिर मुझे एहसास हुआ कि मैं jdk8_u31 का उपयोग कर रहा हूं। अब 8_40 के साथ यह काम कर रहा है। उसके लिए धन्यवाद। लेकिन मुझे आश्चर्य है कि मेरे पास यू31 में संवाद क्यों था, क्योंकि मैंने हर जगह पढ़ा है यह यू40 के बाद से उपलब्ध है .. कोई विचार? – Timo

+1

मैंने अभी अपना जवाब संपादित कर लिया है, क्योंकि modena.css में पहले से ही 8u40 ea में '.dialog-pane' selector शामिल है। मेरी दूसरी पोस्ट [openjfx-dialogs] से संबंधित थी (https://bitbucket.org/controlsfx/openjfx-dialogs), कंट्रोलएफएक्स से निकाली गई परियोजना, 8u20, 8u25 और 8u31 संस्करणों के लिए मान्य है। –

+0

इस उत्तर के लिए धन्यवाद, यह बहुत उपयोगी था! हालांकि, मैंने देखा है कि 'हेडर' का उपयोग अब और काम नहीं कर रहा है, इसलिए मैंने अभी '.myDialog .header-panel' का उपयोग किया है, जो पूरी तरह से काम करता है। मैं भी 8u40 का उपयोग कर रहा हूँ .. – bashoogzaad

संबंधित मुद्दे