我有一个带有复选框的表格。我想在单击第三列或第四列中的复选框时更改第一列中复选框的选择。我希望能够更改同一行中的其他单元格。我已经有了列,所以我想知道单元格在哪一行。我也很不确定到目前为止我是否正确。
到目前为止,我所做的主要是从
这是我的 SSCCE(简短的自包含可编译示例)
如果下面的代码有问题,请指正。
package javafxapplication5;
import javafx.application.Application;
import javafx.beans.property.StringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.CheckBox;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.util.Callback;
public class JavaFXApplication extends Application {
private static final ObservableList<ContactOptions> addContactOption = FXCollections.observableArrayList(
new ContactOptions("Yes", "John Doe", "No", "Yes"),
new ContactOptions("Yes", "Jane Doe", "No", null),
new ContactOptions("Yes", "John Smith", "Yes", "Yes"),
new ContactOptions("Yes", "Patty Smith", "Yes", "No"),
new ContactOptions("Yes", "Jo Johnson", "Yes", "Yes"),
new ContactOptions("No", "Mary Johnson", "No", "No"),
new ContactOptions("Yes", "Clint Doe", "No", null),
new ContactOptions("Yes", "Sally Sue", "No", "Yes"),
new ContactOptions("Yes", "Bob Ryan", null, "Yes"),
new ContactOptions("No", "Mary Sue", "No", "No"),
new ContactOptions("Yes", "Bob Smith", "No", "Yes"));
private static TableView<ContactOptions> contactOptions = new TableView<ContactOptions>();
public static void main(String[] args) {
Application.launch(JavaFXApplication.class, args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Hello World");
Group root = new Group();
Scene scene = new Scene(root, 400, 200, Color.LIGHTGREEN);
Callback<TableColumn, TableCell> cellFactory = new Callback<TableColumn, TableCell>() {
@Override
public TableCell call(final TableColumn param) {
final CheckBox checkBox = new CheckBox();
final TableCell cell = new TableCell() {
@Override
public void updateItem(Object item, boolean empty) {
super.updateItem(item, empty);
if (item == null) {
checkBox.setDisable(true);
checkBox.setSelected(false);
} else {
checkBox.setDisable(false);
checkBox.setSelected(item.toString().equals("Yes") ? true : false);
commitEdit(checkBox.isSelected() ? "Yes" : "No");
}
}
};
cell.setNode(checkBox);
return cell;
}
};
TableColumn firstCol = new TableColumn("Contact?");
firstCol.setPrefWidth(60);
firstCol.setProperty("one");
firstCol.setCellFactory(cellFactory);
TableColumn secondCol = new TableColumn("Name");
secondCol.setPrefWidth(200);
secondCol.setSortAscending(true);
secondCol.setProperty("two");
TableColumn thirdCol = new TableColumn("Call");
thirdCol.setPrefWidth(60);
thirdCol.setProperty("three");
thirdCol.setCellFactory(cellFactory);
TableColumn fourthCol = new TableColumn("Email");
fourthCol.setPrefWidth(60);
fourthCol.setProperty("four");
fourthCol.setCellFactory(cellFactory);
contactOptions.setItems(addContactOption);
contactOptions.getColumns().addAll(firstCol, secondCol, thirdCol, fourthCol);
contactOptions.setPrefSize(400, 200);
root.getChildren().add(contactOptions);
primaryStage.setScene(scene);
primaryStage.setVisible(true);
}
public static class ContactOptions {
private final StringProperty one;
private final StringProperty two;
private final StringProperty three;
private final StringProperty four;
ContactOptions(String col1, String col2, String col3, String col4) {
this.one = new StringProperty(col1);
this.two = new StringProperty(col2);
this.three = new StringProperty(col3);
this.four = new StringProperty(col4);
}
public String getOne() {
return one.get();
}
public String getTwo() {
return two.get();
}
public String getThree() {
return three.get();
}
public String getFour() {
return four.get();
}
}
}
最佳答案
在调用commitEdit之前,需要先调用getTableView().edit(getTableRow().getIndex(), param)。这会将单元格置于“编辑模式”。由于没有 startEdit 方法,因此进入编辑模式涉及的内容很少,但仍然是必需的。
之后,如下所述:http://download.oracle.com/javafx/2.0/ui_controls/table-view.htm
需要调用
firstCol.setOnEditCommit(new EventHandler<EditEvent<String>>() {
@Override
public void handle(EditEvent<String> event) {
String newValue = event.getNewValue();
ContactOptions data = (ContactOptions) event.getTableView().getItems().get(event.getTablePosition().getRow());
data.one.set(newValue)
if(newValue.equals("No")) {
data.three.set("No");
data.four.set("No");
}
}
}
现在我只需要知道 how to update the table's display once the data is updated .
关于JavaFX 2 : Get TableCell Row Index,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7234635/
我正在尝试从Java程序执行Javascript函数。Javascript函数获取HTML文件的内容并突出显示特定单词的出现。是否可以从webview对象调用Javascript函数? 最佳答案 要在WebView中运行javascript,您可以使用WebEngine.executeScript()方法。并且有很多方法可以通过javascript突出显示文本。例如。HighlightwordinHTMLtext(butnotmarkup)一起:WebViewwebView=newWebView();finalWebEngineen
我正在开发一个主要是美化网页的JavaFX应用程序。它是一个桌面应用程序(它没有嵌入到网页中)并且它有一个用于主UI的WebView。该应用程序本身的唯一目的是使用Bluecove访问蓝牙设备,因为在Web浏览器上直接使用JavaScript是不可能的。概念验证工作正常(我能够从Java调用JavaScript代码,反之亦然)但我有一个额外的要求,即从JavaScript中调用任意Web服务/API,但这违反了同源策略(类似于这在Android上:AllowremoteajaxcallsinanAndroidWebview+jquerymobile)。这在JavaFX上可行吗?有什么建
我想在NetBean8.0.2中构建.jar。我开发了一个基于javafx应用程序的小项目。我的项目使用诸如com.sun.org.apache.xml.internal.security、com.sun.org.apache.xml.internal.security.c14n和com.sun.org.apache.xml.internal.security.utils.我的项目在Netbean上运行良好,没有警告或错误。但是当我将这个项目构建为jar文件时,发生了以下错误:**error:packagecom.sun.org.apache.xml.internal.security
我正在使用javafx设计自定义XMLView。想象一下以下XML。EmpireBurlesqueBobDylanUSAColumbia10.901985现在我希望用户能够编辑标题、艺术家等,而他不能更改XML的其余部分。请注意,我的目标是使用XML样式实现此目的,而不是向用户显示输入、对话框。有什么办法可以实现吗? 最佳答案 你可以使用TextFormatter使用正则表达式过滤器以确保格式:这只是一个小示例:(您应该根据需要调整正则表达式)TextAreata=newTextArea();ta.setText("\nEmpire
我有一个用SceneBuilder生成的TableView,所有列都是从其他View导入的FXML,直到没有问题,但列没有填满宽度。我试图用场景构建器和FXML解决这个问题,但没有成功,所有的尺寸都被计算出来了。我尝试使用更改监听器对其进行编码,该监听器会在每次窗口更改大小以适应列的大小时进行检查。这行得通并且列的大小调整到适当的宽度(基本上我得到TableView宽度并将其除以列数),但由于某种原因列开始的点没有改变并且它们与彼此。有什么建议吗? 最佳答案 在Scenebuilder中选择TableView,然后转到属性,将“Co
我是JavaFX的新手。仍在摆弄一些示例,以尝试确定这是否适用于我们正在尝试构建的应用程序。我们应用程序的第一阶段是一种数据输入阶段,用户将准备好提出很多问题并记录他的回答。这里的问题是,另一个团队正在构建问题集,并且这些问题在XML中,如下所示。EnterthenameoftheComponentSelectmechanismtypeType1Type2Type3Type4Whetherthepartshavebeenverifiedbythesupervisor?WhetherthecomponentisavailablewithinthedomicileEnterthequant
我已经在互联网的最深处进行了搜索,但似乎找不到答案-.-问题出在我要编写的javaFx程序中。但除了添加Controller类之外,我无法做任何进一步的事情。我几乎遵循了所有可以找到的教程,但我仍然不知道这个问题。这是异常(exception)情况:javafx.fxml.LoadException:/U:/BankingSolutions/MediaCenterFX/bin/main/ressources/view/MainUI.fxml:12atjavafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2617)at
如何在`.fxml文件的TextArea中编辑text我可以使用linebreaks和tabs。文本区域是预定义的,无法编辑。支持图片FXML文件View 最佳答案 如果你想直接使用文本你可以使用一些东西:如果你想在SceneBuilder中使用,你可以切换到多行模式。切换到多行模式,场景构建器将插入: for\n for\t 关于xml-Javafxfxml文件TextArea文本中的换行符和制表符,我们在StackOverflow上找到一个类似的问题:
我正在用Java和JavaFX创建一个闹钟。问题是,即使应用程序已关闭,我如何运行该应用程序计时器。例如:-有人在上午9:00设置了闹钟,但当前时间是上午8:00并关闭了应用程序,然后预定的闹钟重置并且不起作用(在我的情况下)。我想像Windows中的闹钟一样。即使有人关闭闹钟应用程序,它也会在指定时间显示通知并响起。我也用谷歌搜索了这个问题,但到处都发现只有android和一些警报管理器功能(我对此一无所知),这就是我自己发布的原因。提前感谢您的帮助。 最佳答案 默认情况下,当最后一个阶段关闭时,JavaFX会终止您的应用程序。您
我需要删除“关闭窗口”,它是右键单击任务栏程序时窗口中的菜单项。我该怎么做? 最佳答案 你不能。这是适用于所有最小化应用程序的Windows功能。它与JavaFX或Java本身无关。 关于java-如何在Windows的任务栏上阻止或更改我自己的javafx应用程序符号的右键单击菜单,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/46542844/