2012-05-01 19 views
7

से गिरने से एक एग्रीजन को रोकें क्या जावाफैक्स 2.1 में पूरी तरह से गिरने से एग्रीजन को रोकने का कोई आसान तरीका है? मेरे पास कुछ प्रविष्टियों के साथ एक accordion है लेकिन यदि उपयोगकर्ता सक्रिय accordion प्रविष्टि पर क्लिक करता है तो यह accordion को ध्वस्त कर देता है।जावाएफएक्स में

मैं चेक करने और उसके अनुसार कार्य करने के लिए शायद माउस क्लिक श्रोता का उपयोग कर सकता हूं लेकिन ऐसा लगता है कि इसे पूरा करने के लिए यह भी आसान होना चाहिए।

+1

अब के लिए यह [# RT-28141] (http://javafx-jira.kenai.com/browse/RT-28141) – drzymala

उत्तर

7

वर्तमान में विस्तारित एग्रीजन फलक में श्रोता जोड़ें और इसे उपयोगकर्ता की ढह गई संपत्ति को संशोधित करके उपयोगकर्ता द्वारा ध्वस्त होने से रोकें।

import javafx.application.Application; 
import javafx.application.Platform; 
import javafx.beans.value.*; 
import javafx.scene.Scene; 
import javafx.scene.control.*; 
import javafx.scene.layout.*; 
import javafx.stage.Stage; 

public class AccordionSample extends Application { 
    public static void main(String[] args) { launch(args); } 
    @Override public void start(Stage primaryStage) { 
    // create some titled panes to go in an accordion. 
    TitledPane adminPane = new TitledPane("Animals", 
     VBoxBuilder.create().style("-fx-padding: 10").spacing(10).children(
     ButtonBuilder.create().text("Zebra").maxWidth(Double.MAX_VALUE).build(), 
     ButtonBuilder.create().text("Shrew").maxWidth(Double.MAX_VALUE).build() 
    ).build()    
    ); 
    TitledPane viewPane = new TitledPane("Vegetables", 
     VBoxBuilder.create().style("-fx-padding: 10").spacing(10).children(
     ButtonBuilder.create().text("Eggplant").maxWidth(Double.MAX_VALUE).build(), 
     ButtonBuilder.create().text("Carrot").maxWidth(Double.MAX_VALUE).build() 
    ).build()    
    ); 

    // create an accordion, ensuring the currently expanded pane can not be clicked on to collapse. 
    Accordion accordion = new Accordion(); 
    accordion.getPanes().addAll(adminPane, viewPane); 
    accordion.expandedPaneProperty().addListener(new ChangeListener<TitledPane>() { 
     @Override public void changed(ObservableValue<? extends TitledPane> property, final TitledPane oldPane, final TitledPane newPane) { 
     if (oldPane != null) oldPane.setCollapsible(true); 
     if (newPane != null) Platform.runLater(new Runnable() { @Override public void run() { 
      newPane.setCollapsible(false); 
     }}); 
     } 
    }); 
    for (TitledPane pane: accordion.getPanes()) pane.setAnimated(false); 
    accordion.setExpandedPane(accordion.getPanes().get(0)); 

    // layout the scene. 
    StackPane layout = new StackPane(); 
    layout.setStyle("-fx-padding: 10; -fx-background-color: cornsilk;"); 
    layout.getChildren().add(accordion); 
    primaryStage.setScene(new Scene(layout)); 
    primaryStage.show(); 
    } 
} 
+0

JavaFX-jira पर एक सुविधा का अनुरोध पतन संपत्ति का उपयोग करना है अक्षम कर देता है एनीमेशन – Strassenrenner

2

यहाँ यकीन है कि अकॉर्डियन पूरी तरह से पतन कभी नहीं होगा बनाने के लिए एक और समाधान है:

यहां एक नमूना अनुप्रयोग है। @jewelsea द्वारा महान मूल उत्तर से अंतर थोड़ा कम है - मुझे इस तथ्य को पसंद नहीं आया कि डिफ़ॉल्ट नीचे वाला तीर टाइटलेपेन चेहरे के खुले एग्रीजन से गायब हो रहा था, क्योंकि इसकी "ढहने योग्य" संपत्ति को गलत पर सेट किया जा रहा है। मैंने अपने इंटरफेस के लिए एक और "प्राकृतिक" अनुभव प्राप्त करने के लिए इसके साथ थोड़ा और खेला।

/* Make sure the accordion can never be completely collapsed */ 
    accordeon.expandedPaneProperty().addListener((ObservableValue<? extends TitledPane> observable, TitledPane oldPane, TitledPane newPane) -> { 
     Boolean expand = true; // This value will change to false if there's (at least) one pane that is in "expanded" state, so we don't have to expand anything manually 
     for(TitledPane pane: accordeon.getPanes()) { 
      if(pane.isExpanded()) { 
       expand = false; 
      } 
     } 
     /* Here we already know whether we need to expand the old pane again */ 
     if((expand == true) && (oldPane != null)) { 
      Platform.runLater(() -> { 
       accordeon.setExpandedPane(oldPane); 
      }); 
     } 
    }); 
संबंधित मुद्दे