我想在 listView 的行上使用上下文菜单项。在listView的MOUSE_CLICKED事件的事件处理程序中,getSelectionModel().getSelectedItem()返回选定的项目,没关系。但是,当我处理 contextMenuItem 的 onAction 事件时,它返回 null。然而,以图形方式该项目被选择。有没有办法在第一次事件处理后“保留”选择?
这是代码的相关部分:
ListView<Text> nameList = new ListView<>();
final ContextMenu cCm = new ContextMenu();
MenuItem cItem = new MenuItem("someText");
cCm.getItems().add(cItem);
Run Code Online (Sandbox Code Playgroud)
...
nameList.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent e) {
if (e.getButton() == MouseButton.SECONDARY) {
//its OK here:
System.out.println(nameList.getSelectionModel().getSelectedItem().getText());
cCm.show(nameList, e.getScreenX(), e.getScreenY());
}
}
});
cItem.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent e) {
final Stage dialog = new Stage();
dialog.initModality(Modality.WINDOW_MODAL);
//nullPointerException on the following:
Text t = new Text(nameList.getSelectionModel().getSelectedItem().getText());
//showing dialog, etc.
Run Code Online (Sandbox Code Playgroud) 我正在尝试制作一个组合框,它具有从其项目中搜索匹配项的功能。
这是我所做的代码示例,
ObservableList<String> ab = FXCollections.observableArrayList("z", "asxdf", "abasdf", "bcasdf", "b", "bc", "bcd", "c");
final ComboBox box = new ComboBox(ab);
box.setEditable(true);
box.setOnKeyReleased(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent t) {
box.show();
for (String item : items) {
if (item.startsWith(box.getEditor().getText())) {
box.getSelectionModel().select(item); //which selects the item.
break;
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
现在的问题是box.getSelectionModel().select(item);选择在组合框中键入的特定项目,但我不想选择该项目,我只想将鼠标悬停在(聚焦)该项目上,就像鼠标悬停时一样。
谁能告诉我要替换的代码box.getSelectionModel().select(item);并帮助我解决这个问题。
所以我尝试使用WINDOW_SHOWN如下代码处理来自控制器的事件:
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
initializeDatePickers();
System.out.println("payer number in initialize: " + payerNumber);
URL location = getClass().getResource("/createUser.fxml");
FXMLLoader loader = new FXMLLoader();
try {
Parent root = (Parent) loader.load(location.openStream());
root.getScene().getWindow().setOnShown(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
System.out.println("ONSHOWN");
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
但我所得到的只是无休止的循环和程序崩溃。下面的代码也不起作用,它返回 NullPointerException:
@FXML private AnchorPane createUserDialog; //my root pane
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
createUserDialog.getScene().getWindow().addEventHandler(WindowEvent.WINDOW_SHOWN,
new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent …Run Code Online (Sandbox Code Playgroud) 所以我有这个Timeline自定义动画。节点转换无关紧要。
final KeyValue kv1 = new KeyValue(angle, HALF_PI, Interpolator.LINEAR);
final KeyValue kv2 = new KeyValue(angle, -HALF_PI, Interpolator.EASE_BOTH);
final KeyFrame kf1 = new KeyFrame(Duration.millis(0), kv1);
final KeyFrame kf2 = new KeyFrame(Duration.millis(500), kv2);
Timeline animation = new Timeline(kf1, kf2);
animation.setRate(1);
Run Code Online (Sandbox Code Playgroud)
我的angle变量在此时间线中被修改并用于节点的转换。如您所见,在本例中rate是1,duration是500。
为了平滑转换,我猜测角度应该经历几个离散值,这些值由Interpolator.
另外,我不倾向于使用 aTask来实现这一点。仅当延迟远小于使用Timeline.
问题:
哪种调整可以使动画更加平滑?
A.低rate+ 高duration
B.高rate+ 低duration
C. ??? 其他
我有一个文本字段,它的输入数据应该是 16 位,在第 4、8、12 位之后应该输入空格,我写了这段代码,当我添加第二个内部条件 if 时,程序有堆栈溢出错误,我该怎么办?有什么问题?请帮忙。这是我的代码,我使用更改侦听器:
cardNumberField.textProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> ov, String t, String t1){
if (t1.length() > 0) {
String s = null;
s = t1.substring(t1.length() - 1,t1.length());
if (!s.matches("\\d") || t1.length() > 19) {
cardNumberField.setText(t);
}
if(t1.length() == 4 || t1.length() == 9 || t1.length() == 14){
cardNumberField.setText(t1 + " ");
}
}
}
});
Run Code Online (Sandbox Code Playgroud) 根据我的阅读,可以通过 CSS 编写 JavaFX2 皮肤。但我似乎找不到任何完整的示例,到处都有一些教程,但仅此而已。具体来说,我正在寻找 JavaFX2 的“深色”皮肤。您知道在哪里可以找到预制皮肤吗?
在 JavaFX 2.2 中,我在导入具有 FXML 中定义的自定义单元工厂的自定义组件时遇到问题。假设我的自定义组件如下
public class CustomComponent extends VBox{
public CustomComponent() {
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("CustomComponent.fxml"));
loader.setRoot(this);
loader.setController(this);
loader.load();
} catch (IOException e ){
throw new RuntimeException(e);
}
}
Run Code Online (Sandbox Code Playgroud)
}
而对应的 FXML 是
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.VBox?>
<?import application.*?>
<?import application.TestFactory?>
<fx:root prefHeight="358.0" prefWidth="260.0" type="VBox" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8">
<children>
<TableView prefHeight="200.0" prefWidth="200.0" VBox.vgrow="ALWAYS">
<columns>
<TableColumn prefWidth="75.0" text="C1" >
<cellFactory>
<TestFactory />
</cellFactory>
</TableColumn>
<TableColumn prefWidth="75.0" text="C2" >
<cellFactory>
<TestFactory …Run Code Online (Sandbox Code Playgroud) 我正在做一个项目,我需要你的帮助。
我想知道这是否可以按百分比设置锚板约束,例如
AnchorPane.setLeftAnchor(content1, 35%);
Run Code Online (Sandbox Code Playgroud) 我有一个带有复选框的第一列的 TableView。
我设法正确显示复选框并使其可编辑,但是当我单击复选框以选中或取消选中时,复选框会更改但它不会更新我的模型。
我是这样做的:
TableColumn<ContasReceber, Boolean> myCheckBoxColumn = (TableColumn<ContasReceber, Boolean>) tabelaContas.getColumns().get(0);
myCheckBoxColumn.setCellFactory(p -> new CheckBoxTableCell<>());
myCheckBoxColumn.setOnEditCommit(evt -> evt.getRowValue().setChecked(evt.getNewValue()));//It never executes the method setChecked when i click on the checkBox to change it's values.
Run Code Online (Sandbox Code Playgroud) 我有以下功能来保存 LineChart 图像:
@FXML
public void saveAsPng() {
String timeStamp = new SimpleDateFormat("HHmmss_yyyyMMdd").format(Calendar.getInstance().getTime());
chart.setAnimated(false);
System.out.println("Saving . . .");
WritableImage image = chart.snapshot(new SnapshotParameters(), null);
File file = new File("chart"+timeStamp+".png");
try {
ImageIO.write(SwingFXUtils.fromFXImage(image, null), "png", file);
} catch (IOException e) {
Logger.getLogger(SampleController.class.getName()).log(Level.SEVERE, null, e);
System.out.println("Error");
}
}
Run Code Online (Sandbox Code Playgroud)
遗憾的是,用于 ARM 的 JDK 不支持Swing API。使用时出现错误:
ImageIO.write(SwingFXUtils.fromFXImage(image, null), "png", file);
Run Code Online (Sandbox Code Playgroud)
我在WritableImage 图像变量中有渲染图像。还有其他方法可以保存图表吗?
javafx-2 ×10
java ×7
javafx ×6
javafx-8 ×5
scenebuilder ×2
arm ×1
combobox ×1
controller ×1
java-8 ×1
swing ×1