我的 UI 中有一个 TableView,它显示数据库中的用户列表。该表的一列是可编辑的,当启用编辑时,该特定列的单元格将变成树形视图,列出可以选择的各种选项。
只是为了澄清,我试图在表格单元格上实现类似日期选择器或颜色选择器的功能,但使用我自己的项目列表作为树。
该表是这样定义的
private TableView<User> userTable;
Run Code Online (Sandbox Code Playgroud)
显示树视图的特定列定义如下
private TableColumn<User, TreeView> col4;
Run Code Online (Sandbox Code Playgroud)
我设置了像这样的 setcellFactory 方法来显示树
col4.setCellFactory(new Callback<TableColumn<User,TreeView>, TableCell<User,TreeView>>() {
@Override
public TableCell<User, TreeView> call(
TableColumn<User, TreeView> param)
{
returns a comboboxtablecell which is filled with a tree
}
});
Run Code Online (Sandbox Code Playgroud)
在表中的相应列中,当我单击单元格时,该单元格显示一个组合框,打开时的组合框显示树值。
但是,当单元格处于不可编辑状态时,我不确定应该如何使用字符串值设置 setcellValuefactory
col4.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<User,TreeView>, ObservableValue<TreeView>>() {
@Override
public ObservableValue<TreeView> call(
CellDataFeatures< User,TreeView> param)
{
}
}
Run Code Online (Sandbox Code Playgroud)
当单元格处于不可编辑状态时,我想将树视图内的值显示为字符串。我不知道如何根据方法签名返回树视图类型的可观察值并仍然显示字符串。
我有一些Task执行可能挂起的 I/O 阻塞操作(从 中获取文件URL)
task = new Task<List<WSDLOperation>>() {
@Override
protected List<WSDLOperation> call() {
List<WSDLOperation> services = new ArrayList<>();
try {
services = WSDLService.createService(wsdlURL).getOperations();
} catch (Exception ex) {
LOG.log(Level.WARNING, "Can't reach {0}", wsdlURL);
}
return services;
}
};
}
Run Code Online (Sandbox Code Playgroud)
该方法createService可以永远等待而不抛出任何Exception。(我使用Main 类中定义的全局 ( static public)执行任务)。ExecutorService
fxml文件如下(省略头文件):
<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity"
minWidth="-Infinity" prefHeight="600.0" prefWidth="800.0"
xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
fx:id="pane"
fx:controller="com.github.parboiled1.grappa.debugger.mainwindow.MainWindowUi">
<top>
<MenuBar BorderPane.alignment="CENTER">
<Menu mnemonicParsing="false" text="File">
<MenuItem fx:id="loadInput" mnemonicParsing="false"
text="Load file" onAction="#loadFileEvent"/>
<MenuItem fx:id="parse" mnemonicParsing="false"
text="Parse" onAction="#parseEvent"/>
<MenuItem fx:id="closeButton" mnemonicParsing="false"
text="Close" onAction="#closeWindowEvent"/>
</Menu>
</MenuBar>
</top>
<center>
<SplitPane dividerPositions="0.5" prefHeight="160.0" prefWidth="200.0"
BorderPane.alignment="CENTER">
<SplitPane dividerPositions="0.5" orientation="VERTICAL">
<TreeView fx:id="traceTree" prefHeight="200.0"
prefWidth="200.0" editable="false"/>
<TextArea fx:id="traceDetail" prefHeight="200.0"
prefWidth="200.0"/>
</SplitPane>
<TextArea fx:id="inputText" prefHeight="200.0" prefWidth="200.0"/>
</SplitPane>
</center>
</BorderPane>
Run Code Online (Sandbox Code Playgroud)
TreeView我可以毫无问题地设置根。树已更新,没有问题。
我遇到的问题是我无法设法在视图中的给定项目上触发事件。我尝试使用onMouseClicked简单的 System.out.println() 添加一个事件,无论我在树中单击哪个项目,我都可以看到该事件被触发。但我根本无法获取视图中已单击的项目。
我怎么做?
我试图设置我的选择框的默认选定项目,但是它没有按预期工作......
<ChoiceBox fx:id="d" value="- Select choice -">
<String fx:value="hellow"/>
</ChoiceBox>
Run Code Online (Sandbox Code Playgroud) 我想打开一个 pdf 文件并在单击按钮时将其显示在新窗口上,我试了一下,但它不起作用:
Button btn = new Button();
File file=new File("Desktop/Test.pdf");
btn.setText("Open");
btn.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
try {
desktop.open(file);
} catch (IOException ex) {
Logger.getLogger(Exemple.class.getName())
.log(Level.SEVERE, null, ex);
}
}
});
Run Code Online (Sandbox Code Playgroud) 好的,我通过一些 CSS 修改来更改 DatePicker 样式;但是,所选日期不再显示。这是我的新 DatePicker
这是我的 CSS,使这个时髦的事情成为可能
.date-picker-popup > .month-year-pane {
-fx-padding: 0.588883em 0.5em 0.666667em 0.5em;
-fx-background-color: -fx-main-back;
-fx-background-insets: 0 0 0 0, 0 0 1 0;
}
.date-cell {
-fx-background-color: -fx-main-back;
-fx-font-family: "Andalus";
-fx-font-size: 16.0;
-fx-text-fill: -fx-type;
}
.date-cell:hover {
-fx-background-color: -fx-type;
-fx-font-family: "Andalus";
-fx-font-size: 16.0;
-fx-text-fill: -fx-main-back;
}
Run Code Online (Sandbox Code Playgroud)
不确定所选日期的 CSS 是什么。我尝试过各种各样的东西,比如
.date-cell:selected {
-fx-background-color: -fx-type;
-fx-font-family: "Andalus";
-fx-font-size: 16.0;
-fx-text-fill: -fx-main-back;
}
.date-cell:focused {
-fx-background-color: -fx-type;
-fx-font-family: "Andalus";
-fx-font-size: 16.0;
-fx-text-fill: -fx-main-back;
}
.date-cell-selected {
-fx-background-color: -fx-type; …Run Code Online (Sandbox Code Playgroud) 我在 JavaFX 中使用 fxml,并且想要一个列表主/详细视图。左侧的固定大小的列表,以及宽度随着窗口大小而增长的 TextArea 的细节。
这是我的 fxml:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.ListView?>
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.HBox?>
<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="800.0" prefWidth="1280.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1">
<top>
<MenuBar prefWidth="671.0" BorderPane.alignment="CENTER">
<menus>
<Menu mnemonicParsing="false" text="File">
<items>
<MenuItem mnemonicParsing="false" text="Close" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="Edit">
<items>
<MenuItem mnemonicParsing="false" text="Delete" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="Help">
<items>
<MenuItem mnemonicParsing="false" text="About" />
</items>
</Menu>
</menus>
</MenuBar>
</top>
<center>
<HBox BorderPane.alignment="CENTER">
<children>
<ListView prefHeight="754.0" prefWidth="236.0" /> …Run Code Online (Sandbox Code Playgroud) 在 youtube 上有这个视频https://www.youtube.com/watch?v=Idtm2Y6I23w 其中
这个人动态填充了从存储在数据库中的项目创建的按钮。例如在这张图片中

它有一些类别,包括Tables,Stock,Reports和Users
当在用户点击Table类别它显示Buttons动态地从存储在数据库中的MySQL项创建的。例如,这是结果图像:
一个人怎么发展成这样?是否有将要使用的 for 循环语句?
编辑
我就是这样做的。这是源代码。
public class OrderController implements Initializable {
@FXML
private ListView<Button> listvieww;
@FXML
private HBox hboxx;
List<String> listOfSomething = null;
//@FXML
// private Pane panedynamic;
private DBConnection database = new DBConnection();
private Connection connection;
private Statement statement;
private ResultSet resultSet;
private ObservableList<Button> buttons = FXCollections.observableArrayList();
/**
* Initializes the controller class.
*/
@Override
public void initialize(URL url, ResourceBundle …Run Code Online (Sandbox Code Playgroud) JavaFX 应用程序线程。我能找到的消息来源说节点上的所有更新都必须在这个线程中发生。
我正在尝试查找有关此规则的文档,以及此规则是否有任何例外。 https://docs.oracle.com/javase/8/javafx/interoperability-tutorial/concurrency.htm 正如它所说:
JavaFX 场景图表示 JavaFX 应用程序的图形用户界面,它不是线程安全的,只能从 UI 线程(也称为 JavaFX 应用程序线程)访问和修改。
https://docs.oracle.com/javase/8/javafx/get-started-tutorial/jfx-architecture.htm#A1107438
任何“实时”场景,即属于窗口一部分的场景,都必须从此线程访问。可以在后台线程中创建和操作场景图,但是当其根节点附加到场景中的任何活动对象时,必须从 JavaFX 应用程序线程访问该场景图。
我曾经历过,并非节点上的所有更新都必须在 JavaFX AT 上完成。一些更新节点的调用在该线程之外工作正常。例如,更新 Text textProperty 不需要在 JavaFX AT 中运行。因此,它看起来不像设置工具提示,或者改变可见性/禁用/管理。
JavaFX AT 之外的 Label textProperty 更新将抛出一个
IllegalStateException:不在 FX 应用程序线程上;当前线程 = 任务
我正在尝试创建自己的 Tooltip 类。基本上,工具提示将是一个 标签,底部有一个指针图形(FontAwesomeView),全部包裹在vbox 中。
我遇到的部分是,如何在屏幕上显示我的自定义工具提示而不将其添加到父节点?
我正在尝试使用 css 更改 TitledPane 上标题的外观,应用了我分配的所有样式,文本颜色除外。
谁能看到我做错了什么?
.titled-pane > .title
{
-fx-background-color: rgba(0, 60, 136, 0.5);
-fx-border-color: rgba(0, 60, 136, 0.8);
-fx-font-family: 'Lucida Grande',Verdana,Geneva,Lucida,Arial,Helvetica,sans-serif;
-fx-font-size: 16px;
-fx-font-weight: bold;
-fx-text-fill: WHITE;
}
Run Code Online (Sandbox Code Playgroud)
我也试过
.titled-pane > .title > .text
{
-fx-text-fill: WHITE;
}
Run Code Online (Sandbox Code Playgroud)
没有成功
我有这个组合框,可将对象列表插入组合框中:
private List<ListGroupsObj> lisGroups;
public static class ListGroupsObj
{
private int groupId;
private String groupName;
public static ListGroupsObj newInstance()
{
return new ListGroupsObj();
}
public ListGroupsObj()
{
}
public ListGroupsObj groupId(int groupId)
{
this.groupId = groupId;
return this;
}
public ListGroupsObj groupName(String groupName)
{
this.groupName = groupName;
return this;
}
public int getGroupId()
{
return groupId;
}
public String getGroupName()
{
return groupName;
}
// @Override
// public String toString()
// {
// return serverName;
// }
}
ListGroupsObj ob …Run Code Online (Sandbox Code Playgroud) 我正在尝试在JavaFX中绘制10,000个圆圈,但似乎不起作用,甚至无法绘制一个圆圈。实际上,它引发了我一个错误:

这是我目前拥有的代码:
public class RandomCircles extends Application {
private Random randomNumbers;
private int count;
private final double MAX_X = 600;
private final double MAX_Y = 300;
private final int FINAL_CIRCLES = 10000;
public void start(Stage primaryStage){
Circle initCircle = new Circle();
initCircle.setStroke(Color.BLACK);
initCircle.setStrokeWidth(3);
initCircle.setRadius(1);
for(count = 0; count <= FINAL_CIRCLES; count++){
initCircle.setCenterX(randomNumbers.nextInt((int) MAX_X));
initCircle.setCenterY(randomNumbers.nextInt((int) MAX_Y));
}
Group baseDemo = new Group(initCircle);
// Scene scene = new Scene(baseDemo, MAX_X, MAX_Y);
Scene scene = new Scene(baseDemo);
scene.setFill(Color.WHITE);
scene.getWidth();
primaryStage.setTitle("10,000");
primaryStage.setScene(scene);
primaryStage.setResizable(true);
primaryStage.show(); …Run Code Online (Sandbox Code Playgroud)