在javaFX应用程序中包装swing组件的能力似乎已经从javaFX 2中消失了:
javafx.ext.swing.SwingComponent
在javaFX 2 beta API中没有更多.
还有办法在新API中执行此操作吗?
我测试了这段代码:
public static void main(String[] args)
{
Application.launch(args);
}
@Override
public void start(Stage primaryStage)
{
// Image
Image image = new Image("za.png");
ImageView imageView = new ImageView();
imageView.setImage(image);
// Text
Text t = new Text();
t.setText("Do you want to quit?");
// Buttons
Button btnYes = new Button("Yes");
Button btnNo = new Button("No");
btnYes.setStyle("-fx-background-color:\n"
+ " #090a0c,\n"
+ " linear-gradient(#38424b 0%, #1f2429 20%, #191d22 100%),\n"
+ " linear-gradient(#20262b, #191d22),\n"
+ " radial-gradient(center 50% 0%, radius 100%, rgba(114,131,148,0.9), rgba(255,255,255,0));\n"
+ " -fx-background-radius: …Run Code Online (Sandbox Code Playgroud) JavaFX TableView有一个占位符属性,它基本上是在它为空时Node显示的TableView.如果此属性设置为null(其默认值),则它显示为一个Label或其他一些基于Node"表中没有内容"的文本.
但是如果表中有任何数据行,则占位符将Node消失,并且整个垂直空间TableView将填充行,如果没有足够的数据填充整个表,则包括空行.
这些空行是我想要的,即使表是空的.换句话说,我根本不想使用占位符.有谁知道我怎么做到这一点?
我宁愿不做什么事情,就像TableView在它应该实际上是空的时候放一个空洞的行.
我有这个日期选择器的例子.你能告诉我如何设置日历的日期格式吗?
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.DatePicker;
import javafx.stage.Stage;
import java.time.LocalDate;
public class PickerDemo extends Application {
@Override public void start(Stage stage) {
final DatePicker datePicker = new DatePicker(LocalDate.now());
datePicker.setOnAction(event -> {
LocalDate date = datePicker.getValue();
System.out.println("Selected date: " + date);
});
stage.setScene(
new Scene(datePicker)
);
stage.show();
}
public static void main(String[] args) { launch(args); }
}
Run Code Online (Sandbox Code Playgroud) 我的JavaFX Scene Builder v2.0-b14有问题.
不时,该FXML 无法得到打开.即使我删除除了root之外的FXML 中的所有内容.
在任务栏中,它看起来像这样:

如果我重命名文件,我可以正常打开 FXML .

有没有人知道/有这个问题,或者知道SceneBuilder缓存这些东西的位置?
问候,
卡拉施
在我目前的项目中,我正在开发一个包含TreeTableView的相当简单的JavaFX GUI.要初始化View,我有以下代码.
cmdNrColumn.setCellFactory(new Callback<TreeTableColumn<Command, Command>, TreeTableCell<Command, Command>>() {
@Override public TreeTableCell<Command, Command> call(final TreeTableColumn<Command, Command> p) {
return new TreeTableCell<Command, Command>() {
@Override protected void updateItem(Command item, boolean empty) {
super.updateItem(item, empty);
TreeTableView treeTable = p.getTreeTableView();
if (getIndex() >= treeTable.getExpandedItemCount()) {
setText(null);
} else {
TreeItem<Command> treeItem = treeTable.getTreeItem(getIndex());
if (item == null || empty || treeItem == null || treeItem.getValue() == null) {
setText(null);
} else {
setText(Integer.toString(item.getCmdNr()));
}
}
}
};
}
});
Run Code Online (Sandbox Code Playgroud)
作为Java 8的新手,我不太确定是否以及如何将其简化为Lambda表达式.
有关如何将复杂和嵌套调用转换为Lambda表达式的任何帮助或教程将不胜感激
谢谢!
我目前在从FXML设置CheckBoxTableCell时遇到问题.我试图将此代码转换为FXML:
tableCol.setCellValueFactory(new PropertyValueFactory<Product, Boolean>("property"));
tableCol.setCellFactory(CheckBoxTableCell.forTableColumn(toStockCol));
Run Code Online (Sandbox Code Playgroud)
其中'property'只是'Product'类的一些属性(来自'boolean'类型).这段代码工作正常.我现在尝试在FXML中设置它,如下所示:
<TableColumn text="Some Col">
<cellValueFactory><PropertyValueFactory property="property" /></cellValueFactory>
<cellFactory><CheckBoxTableCell editable="true" /></cellFactory>
</TableColumn>
Run Code Online (Sandbox Code Playgroud)
这不起作用,我得到以下错误(这是一个FXML LoadExeption):
Caused by: java.lang.IllegalArgumentException: Unable to coerce CheckBoxTableCell@24d62d1e[styleClass=cell indexed-cell table-cell check-box-table-cell]'null' to interface javafx.util.Callback.
at com.sun.javafx.fxml.BeanAdapter.coerce(BeanAdapter.java:495)
at com.sun.javafx.fxml.BeanAdapter.put(BeanAdapter.java:258)
at com.sun.javafx.fxml.BeanAdapter.put(BeanAdapter.java:54)
at javafx.fxml.FXMLLoader$PropertyElement.set(FXMLLoader.java:1409)
at javafx.fxml.FXMLLoader$ValueElement.processEndElement(FXMLLoader.java:786)
at javafx.fxml.FXMLLoader.processEndElement(FXMLLoader.java:2827)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2536)
... 42 more
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚我做错了什么.此外,在我看来,几乎没有关于如何使用FXML在TableView中设置CheckBox的文档.
注意:我想从FXML设置它,因为它似乎是这个的地方.我知道这可以用FXML控制器完成.而且,我只是好奇.
任何帮助是极大的赞赏!
问题
我正在为我的应用程序创建一个超级马里奥主题css样式表,我想将我的按钮字体更改为名为Press Start 2P的自定义字体,这是NES Mario游戏中使用的像素化字体.但是,由于某些奇怪的原因,我的应用程序没有加载字体.
CSS代码:
.text
{
-fx-font-family: "Press-Start-2P";
}
.button
{
-fx-background-color: transparent;
//-fx-text-fill: rgb(255, 255, 255);
}
@font-face
{
font-family: Press-Start-2P;
src: url("PressStart2P.ttf");
}
Run Code Online (Sandbox Code Playgroud)
当我运行应用程序时,它给了我这样的信息:
2015年4月25日上午8:22:32 com.sun.javafx.css.StyleManager loadStylesheetUnPrivileged INFO:无法加载@ font-face字体[file:/ C:/ Users/Ahmad%20El-Baher/Documents/Programming/Java /Integrative%20Project%20Semester%204/trunk/build/classes/res/styles/PressStart2P.ttf]
如何让我的应用程序正确加载我的字体?
我试图在里面放几个组件ScrollPane.这些组件应该能够通过鼠标(单击并拖动)在此窗格中移动.它ScrollPane本身是可以平移和可缩放的.
现在,如果我选择其中一个并将其拖动到一个新位置,如果我缩小,鼠标比组件快.放大时,组件的移动速度比鼠标移动的速度快.
如果没有缩放,它会一直工作,直到我到达ScrollPane自动平移的某个位置.
它必须对确定的节点坐标做一些事情.有没有人知道我必须添加什么才能使其正常工作?
我的控制器类:
public class MainWindowController implements Initializable {
private final double SCALE_DELTA = 1.1;
private final StackPane zoomPane = new StackPane();
private Group group = new Group();
@FXML
private ScrollPane scrollPane;
@Override
public void initialize(URL url, ResourceBundle rb) {
Node node1 = new Node("Test");
Node node2 = new Node("Test2", 100, 200);
group.getChildren().addAll(node1, node2);
zoomPane.getChildren().add(group);
Group scrollContent = new Group(zoomPane);
scrollPane.setContent(scrollContent);
scrollPane.viewportBoundsProperty().addListener((ObservableValue<? extends Bounds> observable,
Bounds oldValue, Bounds newValue) -> {
zoomPane.setMinSize(newValue.getWidth(), …Run Code Online (Sandbox Code Playgroud) 我想创建一个在画布中执行许多渲染的应用程序.正常的JavaFX方式阻止了GUI:按下下面的应用程序代码中的按钮真的很难(用Java 8运行).
我在网上搜索,但JavaFX不支持后台渲染:所有渲染操作(如strokeLine)都存储在缓冲区中,稍后在JavaFX应用程序线程中执行.所以我甚至不能使用两个画布并在渲染后进行交换.
此外,javafx.scene.Node.snapshot(SnapshotParameters,WritableImage)不能用于在后台线程中创建映像,因为它需要在JavaFX应用程序线程内运行,因此它也会阻止GUI.
有没有非阻塞GUI和许多渲染操作的想法?(我只想按下按钮等,同时在背景中以某种方式执行渲染或定期暂停)
package canvastest;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import javafx.animation.AnimationTimer;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.StrokeLineCap;
import javafx.stage.Stage;
public class DrawLinieTest extends Application
{
int interations = 2;
double lineSpacing = 1;
Random rand = new Random(666);
List<Color> colorList;
final VBox root = new VBox();
Canvas canvas = new Canvas(1200, 800);
Canvas canvas2 = new …Run Code Online (Sandbox Code Playgroud)