我有一个带有复选框的第一列的 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) 我的 FXML 注入有问题。据我所知,我已经设置了我的程序,但似乎我遗漏了一些东西。我的代码如下:
主要的:
package application;
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("NoteKeeper.fxml"));
BorderPane root = (BorderPane)loader.load();
Scene scene = new Scene(root,root.getHeight(),root.getWidth());
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
Run Code Online (Sandbox Code Playgroud)
控制器:
package application;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.ScrollPane; …Run Code Online (Sandbox Code Playgroud) 我是 Guice 和 JavaFX 的新手(非常新)。我正在构建一个应用程序,它有一个线程侦听套接字连接,并且在接收到事件后,线程将值存储在 ObservableArrayList() 上,应用程序会将它们通知给用户。
我的问题是如何构建所有这些行为,以及如何从线程和 JavaFX 控制器“共享” ObservableList。
我正在阅读有关 Guice 的文章,它可以帮助解耦new对象的创建。
我试图设置一些东西,但 @Inject 属性在我的可运行任务中为空:
图形模块:
public class AppGuiceModule extends AbstractModule{
@Override
protected void configure() {
bind(EventsDAO.class).toInstance(new EventsDAO());
}
}
Run Code Online (Sandbox Code Playgroud)
EventsDAO(具有 ObservableArrayList )
@Singleton
public class EventsDAO {
private ObservableList<ScheduledEvent> localCache = FXCollections.observableArrayList();
public void addEvent(ScheduledEvent event) {
localCache.add(event);
}
public void removeEvent(ScheduledEvent event) {
this.localCache.remove(event);
}
}
Run Code Online (Sandbox Code Playgroud)
有了两个这个,我在我的主要我去创建注入器:
@Override
public void start(Stage stage) throws Exception {
Injector injector = Guice.createInjector(new AppGuiceModule());
Platform.setImplicitExit(false);
Thread …Run Code Online (Sandbox Code Playgroud) 我意识到 SO 上已经有一个类似的问题,但是,该问题与 VMWare 无关,我想知道这更像是 VMWare 问题还是一般的 Linux 问题。
创建动画 3D 球体时,我在 Eclipse 中收到以下警告:
May 17, 2015 5:35:35 PM javafx.scene.shape.Mesh <init> WARNING: System can't support ConditionalFeature.SCENE3D
Run Code Online (Sandbox Code Playgroud)
在 Windows 中编译时,球体是 3D 和动画的。在 Ubuntu 中,它只是 2D 和静态的。
主机 Win 8.1 Nvidia 660m VM Workstation 11(启用 3d 加速,VMware 工具最新)Ubuntu 15.04 LTS
任何共享的用户体验将不胜感激。
这是我非常简单的例子。(下...)
What it does: TreeView is populated with three Persons, when TreeItem is selected Textfield will be populated with name of the selected person. 如果用户更改名称并从文本字段中失去焦点(或按 Enter),它将更改人员的名称并“更新”TreeView 项目的显示文本。
我的问题是这一行:
selectedItem.valueProperty().set(new Person(selectedPerson.getName(), selectedPerson.getAge()));
Run Code Online (Sandbox Code Playgroud)
多亏了那条线,我才能刷新 TreeView。没有那个,我只能在例如调整窗口大小(或根项目的折叠和展开)期间刷新树视图。
我认为这个解决方案非常愚蠢,必须有一种方法可以更好地对其进行编码。我不能每次都创建一个新的 Person 实例,这对我来说是不可接受的。
我还尝试为 treeView 触发一个事件,但这种方法会混淆焦点,而且它也是一个愚蠢的解决方案。我还找到了这样的解决方案:
treeView.getRoot().getChildren().set(treeView.getSelectionModel().getSelectedIndex(), new TreeItem<MainAppTF.Person>(updatedPerson));
Run Code Online (Sandbox Code Playgroud)
这也是不好的解决方案。
也许可以使用属性绑定找到解决方案,但绑定是“实时/即时”更改,除非我使用 bind() unbind(),但也许 Binding 中有一些我还不熟悉的东西。(我更喜欢听众)
我的主要目标是“提交”我对焦点更改或关键事件的更改,并在那一刻之后立即更新 TreeView。
PS:我将非常感谢真实的例子。
public class MainAppTF extends Application {
private TreeView<Person> treeView;
private final TreeItem<Person> rootNode = new TreeItem<Person>(new Person("Root", 0));
private TextField textField;
@Override
public void start(Stage stage) {
VBox box …Run Code Online (Sandbox Code Playgroud) 我想要自定义TableCell<S,T>类,它的行为取决于行对象。“行对象”是指类型的对象S,而不是T.
显然,Cell#getItem()这不是我需要的,因为它返回T。
有什么方法可以防止用户将数据“粘贴”到 TextField?我已经ChangeListener为它设置了 a ,但我找不到如何区分键盘输入和粘贴操作的方法。确定的一件事是:
myChangeListener = (ObservableValue<? extends String> observable, String oldValue, String newValue) -> {
if(Math.abs(newValue.length() - oldValue.length()!=1){
//definitely paste - entered more than one symbol
}
};
Run Code Online (Sandbox Code Playgroud)
但用户也可以一次粘贴单个字符。这是我无法捕捉的场景。请帮忙,提前致谢。
我正在为我的应用程序使用 JavaFX,我正在使用 JavaFX 中的任务来上传文件。
public class Upload extends Task<UploadFile> {
private UploadFile uploadFile;
public Upload(UploadFile uploadFile){
this.uploadFile= uploadFile;
}
@Override
protected synchronized UploadFile call() throws Exception {
....
hcl.invokeMethodUploadFile(uploadFile);
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
方法“initiate”创建一个 UploadFile-Container 并将其添加到 Threadpoolexecutor 的队列中。此方法将对每个文件执行一次。此类还包含在文件上传完成后继续进行的其他必要信息。
public void initiate(){
UploadFile uc = new UploadFile(file);
// Set other informations as well
// add Container to queue
main.getUploadFiles().add(uc);
}
Run Code Online (Sandbox Code Playgroud)
UploadFile 是一个包含有关文件、服务器信息等信息的类。
除其他外,我想在上传完成后将 url 插入到数据库中。文件上传后如何执行一些代码?
在拖放期间在鼠标图标旁边显示节点的半透明“副本”的最佳方法是什么?
基本上,我有带有彩色背景和文本标签的 HBox,并且我想让它们在被拖动时“粘”到鼠标光标上。
如果用户可以直观地验证他们正在拖动的内容,而不是仅仅看到鼠标光标变成各种拖动图标,那就太好了。当您拖动某些组件(例如 RadioButton)时,Scene Builder 倾向于执行此操作。
.slider .track {
-fx-pref-width: 300px;
}
.slider .axis-tick-label {
-fx-text-fill: white;
}
Run Code Online (Sandbox Code Playgroud)
我为滑块编写 CSS 样式的微弱尝试都不起作用。我 100% 确定我的语法是关闭的。有什么帮助吗?