我希望根据LocalDate.now()得到一周中第一天的日期.使用JodaTime可以实现以下功能,但似乎已从Java 8中的新Date API中删除.
LocalDate now = LocalDate.now();
System.out.println(now.withDayOfWeek(DateTimeConstants.MONDAY));
Run Code Online (Sandbox Code Playgroud)
我不能称'withDayOfWeek()',因为它不存在.
所以我的问题是:如何根据一些LocalDate获取一周中第一天的日期?
我目前在一个屏幕上有两个tableview,这导致两个TableView都有用户可以选择的行.
现在我只希望同时选择一行(与从中选择哪个TableView无关).我正在考虑某种类型的侦听器,当选择一行时,该侦听器会取消选择另一行.这是我最初的设置:
步骤1
搜索将方法绑定到行选择的方法(没有类似的东西tableview.setOnRowSelected(method)
)
步骤2 创建一个类似于一种监听器的方法:当选择一行时,取消选择另一行(我知道如何做这部分)
Class1 selectedObject1 = (Class1)tableview1.getSelectionModel().getSelectedItem();
Class2 selectedObject2 = (Class2)tableview2.getSelectionModel().getSelectedItem();
if(selectedObject1 != null && selectedObject2 != null) {
tableview1.getSelectionModel().clearSelection();
}
Run Code Online (Sandbox Code Playgroud)
所以,第一步就是问题所在.我想到了一个可以在其上创建监听器的可观察列表,然后将所选行添加到列表中.发生这种情况时,侦听器可以调用该方法.任何人都知道如何制作这个?
任何帮助是极大的赞赏.
我已经阅读了Optional
Java 8中的目的(遗憾的是我不记得在哪里),我很惊讶作者没有提到在类中使用an Optional
作为属性.
由于我在课堂上经常使用选项,我想知道这是不是很好.或者我可以更好地使用普通属性,null
它们在未设置时返回?
注意:看起来我的问题可能是基于意见的,但我觉得Optional
在课堂上使用的感觉真的不是要走的路(看完上面提到的帖子后).但是,我喜欢使用它,并且找不到使用它的任何缺点.
例
我想举一个例子来澄清.我有一个类Transaction
,它是这样构建的:
public class Transaction {
private Optional<Customer> = Optional.empty();
....
Run Code Online (Sandbox Code Playgroud)
VS
public class Transaction {
private Customer = null;
....
Run Code Online (Sandbox Code Playgroud)
当在一个检查Customer
,我认为这是最合理的使用transaction.getCustomer().isPresent()
比transaction.getCustomer() != null
.在我看来,第一个代码比第二个代码更清晰.
我目前正在使用ObjectMapper for Swift(参见:https://github.com/Hearst-DD/ObjectMapper/)将String
HTTP请求转换为自定义类的对象.我从请求中获得的JSON是一个JSON数组,我想将其转换为Array
from类型CustomObject
.
我试过这样的:
var object = Mapper<Array<CustomObject>>().map(string: json)
Run Code Online (Sandbox Code Playgroud)
但后来我得到一个错误:Can not find member 'map'
.
该怎么做?
编辑:这是我的CustomObject
班级,从现在开始叫ProductVariant
:
public class ProductVariant: Mappable {
/* Attributes */
public var id = 0
// var size : Size = nil
public var SKU = ""
public var stock = 0
public var numberOfDefects = 0
/* Constructors */
public init?() {
// Empty Constructor
}
required public init?(_ …
Run Code Online (Sandbox Code Playgroud) 我目前在从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控制器完成.而且,我只是好奇.
任何帮助是极大的赞赏!
我有两个整数:year
和week
.我想LocalDateTime
从这两个值构造一个,其中日期代表特定年份中特定周的第一天.
我已经尝试过了:
LocalDateTime ldt = LocalDateTime.of(year, 1, 1, 0, 0).plusWeeks(week-1);
Run Code Online (Sandbox Code Playgroud)
这没有给出正确的结果,因为一年的第一天并不总是该年第一周的开始.我似乎无法弄清楚如何获得第一周的第一天.
使用Java 8中的Date和Time API有没有简单的方法呢?
注:我知道我还可以创建一个给定的答案一种解决方法在这里,但这似乎牵强.也许不是,如果是的话,请告诉我!
这个问题更进一步,JavaFX:与多个EasyBind映射绑定的BooleanBindings停止了.
我想进一步扩展行工厂:在表1中,产品每行显示一行,因此1个产品对象可能有多行.现在我只想禁用一行,如果表2中的金额等于行的总和.例如:Product(SKU:P1)在table1中有三行(均代表金额1).如果Product2中的Product(SKU:P1)的数量= -2,则需要在table1中禁用此产品对象的2行.一个仍然需要启用,无论三者中的哪一个都无关紧要.
我现在有以下代码:
table1.setRowFactory(tv -> {
TableRow<Product> row = new TableRow<>();
row.disableProperty().bind(Bindings.createBooleanBinding(
() -> row.getItem() != null && (row.getItem().getSKU().startsWith("C") ||
(skuAmountLookup.containsKey(row.getItem().getSKU()) &&
-skuAmountLookup.get(row.getItem().getSKU()) <
amounts[SKUs.indexOf(row.getItem().getSKU())] )),
skuAmountLookup,
row.itemProperty()));
return row;
});
Run Code Online (Sandbox Code Playgroud)
在哪里skuAmountLookup
:
skuAmountLookup = table2.getItems().stream().collect(
Collectors.toMap(Product::getSKU, Product::getAmount, (x, y) -> y,
() -> FXCollections.observableHashMap()));
Run Code Online (Sandbox Code Playgroud)
这仅在总金额为表1时禁用行.您可以更改amounts[SKUs.indexOf(row.getItem().getSKU())]
为0
,当仅存在其中一个产品时,将禁用所有行.
我的问题是:如何更改行工厂,以便考虑另一行的disableProperty?
有关其他信息,请参阅:JavaFX:与多个EasyBind映射和JavaFX 绑定的BooleanBindings :基于其他TableView在TableView中禁用多行.
我有以下问题:
我在Eclipse中安装了e(fx)clipse以实现JavaFX兼容性.它正确地创建了以下内容:
它运行不正常,因为它缺乏以下功能:
Unknown property: -fx-....
我的CSS中的每个条目.The controller 'someController' has no field 'someField'
,而字段是在控制器中启动的.我已经尝试解决这个问题:
这并没有解决问题.我认为它与添加库有关,因为当我添加JavaFX SDK并单击"下一步"时,我得到一个blanco屏幕,我必须单击"完成".当我这样做时,它只会增加org.eclipse.fx.ide.css.jfx8
.这是正常的,还是应该有更多的包?
我正在使用Eclipse Luna 4.4.1和Java JDK 8u40.
任何帮助是极大的赞赏!
我目前有一个包含四个TextField的对话框,从中收集输入.当输入无法满足我的要求时,对话框应保持打开状态并显示错误消息.我目前有以下代码:
dlg.setResultConverter(dialogButton -> {
if (dialogButton == createButtonType) {
ArrayList<String> returnList = getInput();
if (returnList != null) {
return returnList;
}
else {
dlg.showAndWait();
}
}
return null;
});
Optional<ArrayList<String>> result = dlg.showAndWait();
result.ifPresent(customerDetails -> {
//Use the input for something
});
Run Code Online (Sandbox Code Playgroud)
该getInput()
方法从TextFields获取文本并根据某些要求对其进行测试.当输入通过时,四个字符串被放入ArrayList<String>
.否则,该方法返回null
.如您所见,结果转换器检查方法是否返回null
.如果没有,它只会返回ArrayList<String>
.
但是,当验证失败时,对话框应保持打开状态.它适用dlg.showAndWait()
,但缺点是它会触发错误:java.lang.IllegalStateException: Stage already visible
.(它继续工作,但得到错误不是应该的方式)
我的问题是:有没有人知道如何做到这一点,而不会触发错误?
注意:我使用的是JavaFX 8(JDK 1.8.0_40),它具有内置的对话功能.
我有一个关于多线程和StringProperty绑定的问题.
我有一个类CacheManager
,其中包含一个Thread
更新我的缓存与服务器上的更改.现在,我想通知文本和进度的百分比(这是一个Label
和ProgressBar
在JavaFX中).我使用public static DoubleProperty
,StringProperty
为此,在CacheManager
类中定义.我只是像这样绑定它:
progressBar.progressProperty().bind(CacheManager.progress);
someLabel.textProperty().bind(CacheManager.status);
Run Code Online (Sandbox Code Playgroud)
现在,在Updater线程中,我更新了这些Properties
.有了DoubleProperty
这个工作得很好,并且ProgressBar
正显示出完美的进展.但是,更新Label
状态(来自的文本StringProperty
)会引发错误:java.lang.IllegalStateException: Not on FX application thread; currentThread = Thread-9
现在,我的问题是:为什么DoubleProperty
工作正常,而StringProperty
抛出错误?他们考虑多线程有什么区别?
任何关于重新设计的想法也欢迎,非常感谢任何帮助!