Accordions don't seem to change the expanded pane correctly programmatically. See the code example below
package foo;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Accordion;
import javafx.scene.control.Button;
import javafx.scene.control.TitledPane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
public class Main1 extends Application
{
public static void main(String[] args)
{
launch(args);
}
private Parent getContent()
{
VBox box = new VBox(10);
final TitledPane pane1 = new TitledPane();
pane1.setText("title 1\nLong text long text");
pane1.setContent(new Rectangle(100, 40, Color.SKYBLUE));
TitledPane pane2 = new TitledPane();
pane2.setText("title 2\nLong text long text");
pane2.setContent(new Rectangle(100, 40, Color.BLUEVIOLET));
final Accordion acc = new Accordion();
acc.getPanes().addAll(pane1, pane2);
acc.setExpandedPane(pane2);
Button b = new Button("Change to Pane 1");
b.setOnAction(new EventHandler<ActionEvent>()
{
@Override
public void handle(ActionEvent arg0)
{
System.err.println("Changing Pane");
acc.setExpandedPane(pane1);
}
});
box.getChildren().addAll(acc, b);
return box;
}
public void start(Stage stage)
{
stage.setX(100);
stage.setY(100);
stage.setWidth(300);
stage.setHeight(300);
Scene scene = new Scene(getContent());
stage.setScene(scene);
stage.show();
}
}
package foo;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Accordion;
import javafx.scene.control.Button;
import javafx.scene.control.TitledPane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
public class Main1 extends Application
{
public static void main(String[] args)
{
launch(args);
}
private Parent getContent()
{
VBox box = new VBox(10);
final TitledPane pane1 = new TitledPane();
pane1.setText("title 1\nLong text long text");
pane1.setContent(new Rectangle(100, 40, Color.SKYBLUE));
TitledPane pane2 = new TitledPane();
pane2.setText("title 2\nLong text long text");
pane2.setContent(new Rectangle(100, 40, Color.BLUEVIOLET));
final Accordion acc = new Accordion();
acc.getPanes().addAll(pane1, pane2);
acc.setExpandedPane(pane2);
Button b = new Button("Change to Pane 1");
b.setOnAction(new EventHandler<ActionEvent>()
{
@Override
public void handle(ActionEvent arg0)
{
System.err.println("Changing Pane");
acc.setExpandedPane(pane1);
}
});
box.getChildren().addAll(acc, b);
return box;
}
public void start(Stage stage)
{
stage.setX(100);
stage.setY(100);
stage.setWidth(300);
stage.setHeight(300);
Scene scene = new Scene(getContent());
stage.setScene(scene);
stage.show();
}
}