我想访问位于选项卡内的文本区域。 TabPane中的所有选项卡都将具有TextArea。不幸的是,Tab不是接口,并且似乎没有办法改变TabPane内保存的类型,因此我看不到一种使代码知道通用选项卡内没有单独的TextArea的方法。他们在外面某个地方的清单。 TabPane只能返回一个Tab,而Tab不能区分它是否拥有TextArea,即使我扩展Tab并将其提供给TabPane,它也仍然只会返回Tab。保留外部列表似乎确实很麻烦,我不认为这将是预期的设计。所以我在这里想念什么。我没有使用FXML。
答案 0 :(得分:-1)
您可以创建自己的Tab
扩展名,其内容为TextArea
,并为其提供getTextArea()
方法。
这样,您可以知道每个Tab
都有一个TextArea
,并且可以根据需要进行操作。
下面是一个简单的应用程序,用于演示:
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.control.TextArea;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class Main extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
// Simple UI
VBox root = new VBox(10);
root.setAlignment(Pos.CENTER);
root.setPadding(new Insets(10));
// Create the TabPane
TabPane tabPane = new TabPane();
// Create some TextAreaTabs to put into the TabPane
tabPane.getTabs().addAll(
new TextAreaTab("Tab 1", "This is tab 1!"),
new TextAreaTab("Tab 2", "This is tab 2!"),
new TextAreaTab("Tab 3", "This is tab 3!")
);
// A button to get the text from each tab
Button button = new Button("Print Text");
// Set the action for the button to loop through all the tabs in the TabPane and print the contents of its TextArea
button.setOnAction(e -> {
for (Tab tab : tabPane.getTabs()) {
// You'll need to cast the Tab to a TextAreaTab in order to access the getTextArea() method
System.out.println(tab.getText() + ": " +
((TextAreaTab) tab).getTextArea().getText());
}
});
// Add the TabPane and button to the root layout
root.getChildren().addAll(tabPane, button);
// Show the stage
primaryStage.setScene(new Scene(root));
primaryStage.setWidth(300);
primaryStage.setHeight(300);
primaryStage.show();
}
}
// This is the custom Tab that allows you to set its content to a TextArea
class TextAreaTab extends Tab {
private TextArea textArea = new TextArea();
public TextAreaTab(String tabTitle, String textAreaContent) {
// Create the tab with the title provided
super(tabTitle);
// Set the Tab to be unclosable
setClosable(false);
// Set the text for the TextArea
textArea.setText(textAreaContent);
// Set the TextArea as the content of this tab
setContent(textArea);
}
public TextArea getTextArea() {
return textArea;
}
}
一个更简单的选择是将循环中的每个getContent()
的{{1}}方法强制转换为Tab
:
TextArea
我发现第一个选项更具可读性和灵活性,因为您可以将所有选项卡配置为在一个位置内相同。