好吧,我的问题很简单。我正在用Java Fx构建一个应用程序,并且我有一个TabPane。当我打开一个新的选项卡时,该选项卡通过fxml文件获取其内容tab.setContent((节点)FXMLLoader.load(this.getClass().getResource(“/main/textEditor.fxml”))
很好,这很好,它总是在所有标签上加载相同的文件,所以,所有标签上的所有文本区都有相同的id。问题是,用java,我只能得到第一个Tab的textarea的信息。< br>
如何特别编辑一个选项卡的文本区域?
我想做的一个例子:
主要
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.geometry.Rectangle2D;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Screen;
import javafx.stage.Stage;
public class Main extends Application{
public static void main(String[] args) {
Application.launch(Main.class, args);
}
@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("/tabPane/test.fxml"));
Screen screen = Screen.getPrimary();
Rectangle2D bounds = screen.getVisualBounds();
stage.setScene(new Scene(root));
stage.show();
}
}
test.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.net.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>
<?import javafx.scene.layout.AnchorPane?>
<VBox prefHeight="400.0" prefWidth="640.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="tabPane.controller">
<children>
<MenuBar VBox.vgrow="NEVER">
<menus>
<Menu mnemonicParsing="false" onAction="#test" text="File">
<items>
<MenuItem fx:id="insert" mnemonicParsing="false" onAction="#test" text="Insert" />
</items>
</Menu>
</menus>
</MenuBar>
<AnchorPane maxHeight="-1.0" maxWidth="-1.0" prefHeight="-1.0" prefWidth="-1.0" VBox.vgrow="ALWAYS">
<children>
<Label alignment="CENTER" layoutX="155.0" layoutY="177.0" style=" " text="Drag components from Library here…" textAlignment="CENTER" textFill="#9f9f9f" wrapText="false">
<font>
<Font size="18.0" />
</font>
</Label>
<TabPane fx:id="tabPane" prefHeight="375.0" prefWidth="640.0" tabClosingPolicy="UNAVAILABLE">
<tabs>
<Tab text="Untitled Tab 1">
<content>
<TextArea fx:id="textarea" prefHeight="200.0" prefWidth="200.0" text="a" />
</content>
</Tab>
<Tab text="Untitled Tab 2">
<content>
<TextArea fx:id="textarea1" prefHeight="200.0" prefWidth="200.0" text="a" />
</content>
</Tab>
</tabs>
</TabPane>
</children>
</AnchorPane>
</children>
<stylesheets>
<URL value="@../../../../BasicApplicatio11n_css/BasicApplication.css" />
控制器.java
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TextArea;
public class controller implements Initializable{
@FXML
private TextArea textarea;
@Override
public void initialize(URL arg0, ResourceBundle arg1) {
}
public void test(ActionEvent event){
textarea.appendText("Text");
}
}
此示例有两个选项卡,当按下按钮时,我想在当前选定的选项卡上添加文本。
有几种不同的方法可以做到这一点。一种方法是让选项卡内容的控制器从文本区域公开text Property
。然后在您的“主控制器”中,创建一个StringProperty
字段。创建新选项卡时,只需观察其选择的
属性并更新字符串属性字段以指向当前控制器中的那个。然后您可以轻松地将文本加载到“当前”窗格中。
下面是一个简单的示例:
编辑器控制器:
import javafx.beans.property.StringProperty;
import javafx.fxml.FXML;
import javafx.scene.control.TextArea;
public class EditorController {
@FXML
private TextArea textArea ;
public StringProperty textProperty() {
return textArea.textProperty() ;
}
}
使用textEditor.fxml:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.control.TextArea?>
<BorderPane xmlns:fx="http://javafx.com/fxml/1" fx:controller="EditorController">
<center>
<TextArea fx:id="textArea"/>
</center>
</BorderPane>
然后主控制器可能看起来像:
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import javafx.beans.property.StringProperty;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.stage.FileChooser;
public class MainController {
@FXML
private TabPane tabPane ;
private StringProperty currentText ;
public void initialize() throws IOException {
// load an initial tab:
newTab();
}
@FXML
private void newTab() throws IOException {
Tab tab = new Tab("Untitled text");
FXMLLoader loader = new FXMLLoader(getClass().getResource("textEditor.fxml"));
tab.setContent(loader.load());
EditorController controller = loader.getController() ;
tab.selectedProperty().addListener((obs, wasSelected, isNowSelected) -> {
if (isNowSelected) {
currentText = controller.textProperty();
}
});
tabPane.getTabs().add(tab);
tabPane.getSelectionModel().select(tab);
}
@FXML
private void load() {
FileChooser chooser = new FileChooser();
File file = chooser.showOpenDialog(tabPane.getScene().getWindow());
if (file != null) {
Path path = file.toPath();
try {
currentText.set(String.join("\n", Files.readAllLines(path)));
} catch (IOException e) {
Alert alert = new Alert(AlertType.ERROR);
alert.setContentText("Unable to load file "+path);
alert.setTitle("Load error");
alert.showAndWait();
}
tabPane.getSelectionModel().getSelectedItem().setText(path.getFileName().toString());
}
}
}
使用 main.fxml:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.control.TabPane?>
<?import javafx.scene.control.Button?>
<?import javafx.geometry.Insets?>
<BorderPane xmlns:fx="http://javafx.com/fxml/1" fx:controller="MainController">
<center>
<TabPane fx:id="tabPane"/>
</center>
<bottom>
<HBox alignment="CENTER" spacing="5">
<padding>
<Insets top="5" right="5" left="5" bottom="5" />
</padding>
<Button text="Load..." onAction="#load" />
<Button text="New" onAction="#newTab"/>
</HBox>
</bottom>
</BorderPane>
为了完整起见,一个简单的应用程序类:
import java.io.IOException;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws IOException {
Parent root = FXMLLoader.load(getClass().getResource("main.fxml"));
Scene scene = new Scene(root, 800, 800);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
还有其他方法,例如当选项卡选择更改时,您可以更改按钮的onAction
属性等。
是否有任何方法可以生成一行EditTextPreference?我认为默认情况下没有任何财产可以做到这一点。是否需要重写对象?有人做过这个吗?
我有:2个FXML文件和2个控制器。每个FXML都合并了控制器。这是打开新FXML的代码(当真正的fxml运行时,它会打开另一个) 这是打开的FXML文件的控制器 如您所见,我在所有声明的字段上添加了文本(FXML-ID已绑定!)通过initialize方法加载根之后。听起来不错,但我有一个空点异常。 为了清楚地指出事情:-我已经将fxml-id绑定到它们相应的组件。-FXML文件被正确加载(ro
使用JavaFX2.2,我有一个窗口,它主要由一个有4个选项卡的TabPane组成。用户可以更改任何选项卡中显示的数据,如果他们这样做了,我希望确保他们在保存/取消/更新数据之前不会更改该选项卡。特别是,我想确保他们不会选择不同的标签。如果他们试图退出或执行某个菜单项,我可以捕捉到,但我似乎找不到中断选项卡更改的方法。我可以捕捉到他们点击了一个新的选项卡(onSelectionChanged),并
问题内容: 我有一个带有JavaFX 2的Java桌面应用程序,在我的FX中,我有一个TabPane。我想设置默认选项卡。换句话说,我想将一个选项卡设置为选中状态。我发现有多种方法可以找出选择了哪个标签,然后找到了,但我不知道如何使用它。 问题答案: 这是正确的方法。您可以从中获取默认值,也可以使用分配自己的实现。默认模型对于开始应该足够好。 将其存储在某些局部变量中后,您可以使用不同的选项来选择
问题内容: 假设我有一个包含以下内容的文本文件: 有什么方法可以编辑该文本文件中的特定行?现在我有这个: 是的,我知道那是不正确的。但是你明白我的意思吧?我正在尝试通过用法师替换战士来编辑第2行。但是我还能做到吗? 问题答案: 您想做这样的事情: 这样做的原因是您不能直接在文件中执行“更改第2行”之类的操作。您只能覆盖(而不是删除)文件的某些部分- 这意味着新内容仅覆盖旧内容。因此,如果您在第2行
我对Android系统是新手。我在我的旋转器中显示字符串,当用户选择字符串时,我想使用编辑文本视图输入选定的旋转器字符串值(当用户从旋转器中选择食物项时,我想使用编辑文本视图输入食物的值10)。我已经完成了设置旋转器项目,但我不知道如何输入选定的旋转器值。 这是我的java文件, 请帮我做这件事。
我正在尝试使用数据表。列之间的js内联编辑器选项卡https://editor.datatables.net/examples/inline-editing/tabControl.html他们的例子很好用,但我似乎不明白如何禁用我不想内联编辑的列? 网站上的例子 我试着改成 因此,它只针对具有可编辑类的TD。。但是它不起作用。。 不管怎样,如果有人用过这个,我会很感激一个提示:)谢谢!
我使用p:编辑器作为输入: 我将此输入显示为: 但显示时选择了以下编辑器选项:;span style=“font-family:Verdana、Arial、Helvetica、sans-serif;font-size:13px;线宽:18px;背景色:rgb(255、255、255);” 为什么会发生这种情况,如何禁用这些?