/* * Copyright © 2009, 2010, Oracle and/or its affiliates. All rights reserved. * * This software and related documentation are provided under a license * agreement containing restrictions on use and disclosure and are * protected by intellectual property laws. Except as expressly permitted * in your license agreement or allowed by law, you may not use, copy, * reproduce, translate, broadcast, modify, license, transmit, * distribute, exhibit, perform, publish, or display any part, in any * form, or by any means. Reverse engineering, disassembly, or * decompilation of this software, unless required by law for * interoperability, is prohibited. * * The information contained herein is subject to change without notice * and is not warranted to be error-free. If you find any errors, please * report them to us in writing. * * If this is software or related software documentation that is * delivered to the U.S. Government or anyone licensing it on behalf of * the U.S. Government, the following notice is applicable: * * U.S. GOVERNMENT RIGHTS Programs, software, databases, and related * documentation and technical data delivered to U.S. Government * customers are "commercial computer software" or "commercial technical * data" pursuant to the applicable Federal Acquisition Regulation and * agency-specific supplemental regulations. As such, the use, * duplication, disclosure, modification, and adaptation shall be subject * to the restrictions and license terms set forth in the applicable * Government contract, and, to the extent applicable by the terms of the * Government contract, the additional rights set forth in FAR 52.227-19, * Commercial Computer Software License (December 2007). Oracle America, * Inc., 500 Oracle Parkway, Redwood City, CA 94065. * * This software or hardware is developed for general use in a variety of * information management applications. It is not developed or intended * for use in any inherently dangerous applications, including * applications which may create a risk of personal injury. If you use * this software or hardware in dangerous applications, then you shall be * responsible to take all appropriate fail-safe, backup, redundancy, and * other measures to ensure its safe use. Oracle Corporation and its * affiliates disclaim any liability for any damages caused by use of * this software or hardware in dangerous applications. * * Oracle and Java are registered trademarks of Oracle and/or its * affiliates. Other names may be trademarks of their respective owners. * * AMD, Opteron, the AMD logo, and the AMD Opteron logo are trademarks or * registered trademarks of Advanced Micro Devices. Intel and Intel Xeon * are trademarks or registered trademarks of Intel Corporation. All * SPARC trademarks are used under license and are trademarks or * registered trademarks of SPARC International, Inc. UNIX is a * registered trademark licensed through X/Open Company, Ltd. * * This software or hardware and documentation may provide access to or * information on content, products, and services from third * parties. Oracle Corporation and its affiliates are not responsible for * and expressly disclaim all warranties of any kind with respect to * third-party content, products, and services. Oracle Corporation and * its affiliates will not be responsible for any loss, costs, or damages * incurred due to your access to or use of third-party content, * products, or services. */ import javafx.application.Application; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.Toggle; import javafx.scene.control.ToggleButton; import javafx.scene.control.ToggleGroup; import javafx.stage.Stage; /** * * @author slions */ public class ToggleButtonTest2 extends Application { private Scene scene = null; public static void main(String[] args) { Application.launch(ToggleButtonTest2.class, null); } public void start(Stage stage) { scene = new Scene(new Group()); stage.setTitle("TEST"); stage.setWidth(500); stage.setHeight(500); stage.setScene(scene); stage.setVisible(true); final ToggleButton run = new ToggleButton("run"); run.setLayoutX(20); run.setLayoutY(20); final ToggleButton stop = new ToggleButton("stop"); stop.setLayoutX(100); stop.setLayoutY(20); final ToggleGroup toggleGroup = new ToggleGroup(); run.setToggleGroup(toggleGroup); stop.setToggleGroup(toggleGroup); run.setSelected(true); ((Group) scene.getRoot()).getChildren().addAll(run, stop); toggleGroup.selectedToggleProperty().addListener(new ChangeListener() { public void changed(ObservableValue observable, Toggle oldValue, Toggle newValue) { if (newValue == null) { toggleGroup.selectToggle(oldValue); } } }); // When uncommenting the code above, we get the expected behavior but this is like a duplication // Why do we need to add the following listeners // run.selectedProperty().addListener(new ChangeListener() { // // public void changed(ObservableValue observable, Boolean oldValue, Boolean newValue) { // if (newValue == false && toggleGroup.getSelectedToggle() == null) { // toggleGroup.selectToggle(run); // run.setSelected(true); // } // } // }); // // stop.selectedProperty().addListener(new ChangeListener() { // // public void changed(ObservableValue observable, Boolean oldValue, Boolean newValue) { // if (newValue == false && toggleGroup.getSelectedToggle() == null) { // stop.setSelected(true); // } // } // }); } }