我的手风琴有多个titledPane,并且在titledPane的ListView面板中有很多数据。我只是想在搜索数据时扩展所有名为“手风琴”的歌曲。我不知道该怎么做。任何想法?
在这里,我附上了我的真实项目的屏幕截图,它显示了我想要做的事情。
答案 0 :(得分:7)
快速回答:你不能。
Accordion
有一个expandedPane
属性,即一个TitledPane
。 Accordion
无法拥有多个展开的窗格。
相反,您可以直接使用多个TitledPane
(在VBox
或类似内部),以获得所需的行为。不幸的是,这看起来不像Accordion
,因为TitledPane
默认使用不同的样式。但是通过一些自定义CSS(查看caspian.css
以了解手风琴的样式),您可以使其看起来就像Accordion
中的窗格一样。
稍微多做一些工作,你就可以把它变成你自己的"多选手风琴"控制,以便于重复使用。
答案 1 :(得分:3)
TitledPane
。例如VBox
。试试这段代码。
import java.util.ArrayList;
import java.util.Collection;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Accordion;
import javafx.scene.control.TextArea;
import javafx.scene.control.TitledPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class TitledPanes extends Application {
public static void main(String [] args){ launch(args); }
@Override
public void start(Stage primaryStage) throws Exception {
HBox root = new HBox();
VBox noaccordion = new VBox();
noaccordion.getChildren().addAll(this.createPanes());
VBox yesaccordion = new VBox();
Accordion acc = new Accordion();
acc.getPanes().addAll(this.createPanes());
yesaccordion.getChildren().add(acc);
root.getChildren().addAll(noaccordion, yesaccordion);
primaryStage.setScene(new Scene(root,800,400));
primaryStage.show();
}
private Collection<TitledPane> createPanes(){
Collection<TitledPane> result = new ArrayList<TitledPane>();
TitledPane tp = new TitledPane();
tp.setText("Pane 1");
tp.setContent(new TextArea("Random text..."));
result.add(tp);
tp = new TitledPane();
tp.setText("Pane 2");
tp.setContent(new TextArea("Random text..."));
result.add(tp);
tp = new TitledPane();
tp.setText("Pane 3");
tp.setContent(new TextArea("Random text..."));
result.add(tp);
return result;
}
}