Как добавить заголовок к аккордеону, нажав кнопку?

Я создаю программу с JavaFX, и у меня есть Accordion ac, внедренный @FXML, и у меня есть кнопка, которая создает озаглавленную панель в Accordion. Проблема в том, что эта кнопка при нажатии добавляет озаглавленную панель в аккордеон один раз.

Я использую этот код:

t1.setContent(l);
ac.getPanes().add(t1);

Я хочу добавить одну панель при каждом нажатии на эту кнопку. Пожалуйста, помогите мне и спасибо!


person Zerro    schedule 12.07.2015    source источник
comment
Где вы создали TitledPane t1? Можете ли вы добавить код для полной onAction() кнопки?   -  person ItachiUchiha    schedule 13.07.2015


Ответы (1)


Это то, что вы ищите?

Сцена.fxml

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<AnchorPane id="AnchorPane" prefHeight="404.0" prefWidth="543.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="pl.brocode.tg.magisterka.mavenproject1.FXMLController">
    <children>
        <Button fx:id="button" layoutX="193.0" layoutY="283.0" onAction="#handleButtonAction" text="Click Me!" AnchorPane.bottomAnchor="1.0" AnchorPane.leftAnchor="193.0" AnchorPane.rightAnchor="193.0" />
      <ScrollPane fitToHeight="true" fitToWidth="true" prefViewportHeight="160.0" prefViewportWidth="320.0" AnchorPane.bottomAnchor="30.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
         <content>
            <Accordion fx:id="accordion" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
         </content>
      </ScrollPane>
    </children>
</AnchorPane>

FXMLController

package test;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Accordion;
import javafx.scene.control.Label;
import javafx.scene.control.TitledPane;
import javafx.scene.layout.AnchorPane;

public class FXMLController implements Initializable {

     @FXML
    private Accordion accordion;

    @FXML
    private void handleButtonAction(ActionEvent event) {
        AnchorPane newPanelContent = new AnchorPane();
        newPanelContent.getChildren().add(new Label("Hello World"));
        TitledPane pane = new TitledPane("World Pane", newPanelContent);
        System.out.println(accordion);
        accordion.getPanes().add(pane);
    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }
}

каждый раз, когда вы нажимаете кнопку, добавляется новая панель. если вы хотите что-то сделать с этой панелью в будущем, вы можете назначить ее полю (списку) или получить ее из аккордеона с помощью метода getChildren().

в код внесена правка, для лучшего отображения добавленных панелей

person T.G    schedule 13.07.2015