我在 JavaFX 中有一個 TableView 顯示許多物件的屬性,代表訂單。
示例 TableView 輸出視窗的螢屏截圖
為此,我有一個名為 items 的 ArrayList,其中填充了來自 Item 類的物件。我已經宣告了很多這樣的物件:
ArrayList items = new ArrayList();
items.add(new Item("01/01/2021", 20, 10, 10, 1));
items.add(new Item("01/21/2021", 15, 5, 10, 2));
items.add(new Item("02/11/2021", 12, 6, 6, 1));
items.add(new Item("03/29/2021", 35, 5, 30, 7));
items.add(new Item("04/14/2021", 16, 16, 0, 0));
items.add(new Item("04/21/2021", 20, 10, 10, 1)); // etc
我想知道是否有辦法利用 2 個用戶輸入的日期 (MM/dd/yyyy) 在 TableView ONLY 物件上顯示日期屬性在范圍之間以匹配物件。我知道我必須洗掉某些物件才能從 TableView 中完全省略它們,但我不確定如何。
例如,如果我們有用戶輸入日期“01/01/2021”和“04/01/2021”,tableview 將只展示示例代碼中顯示的前 4 個專案。
我的用戶輸入邏輯已經完成,但我希望了解如何在使用兩個日期時編輯 ArrayList 本身,以便 TableView 僅輸出正確的順序。
uj5u.com熱心網友回復:
首先,定義您的自定義類以獲取LocalDate物件而不是字串。
record Item ( LocalDate when , int code ) {}
用法。
List < Item > items =
List.of(
new Item( LocalDate.of( 2022 , Month.JANUARY , 23 ) , 10 ) ,
new Item( LocalDate.of( 2022 , Month.FEBRUARY , 24 ) , 11 ) ,
new Item( LocalDate.of( 2022 , 3 , 25 ) , 12 )
)
;
定義您的日期范圍。
LocalDate start = LocalDate.of( 2022 , 2 , 1 ) ;
LocalDate end = start.plusMonths( 1 ) ;
回圈您的串列,檢查每個串列是否匹配。
List< Item > hits = new ArrayList <> () ;
for( Item item : items ) {
if( ( ! item.when.isBefore( start ) ) & item.when.isBefore( end ) ) {
hits.add( item ) ;
}
}
或者使用流和 lambdas。
List< Item > hits = items.stream().filter( item -> ( ! item.when.isBefore( start ) ) & item.when.isBefore( end ) ).toList() ;
如果您正在執行大部分代碼,我建議將ThreeTen-Extra庫添加到您的專案中以使用 class LocalDateRange。
uj5u.com熱心網友回復:
您可以使用 java 庫中的 SimpleDateFormat 類并以特定格式從用戶獲取日期
嘗試運行我的這段代碼以更好地理解該類。
它以 dd/mm/yyyy 格式輸入日期并以 yyyy mm dd 格式顯示
public class DateTime {
static void Condate(String inputDate) {
try {
SimpleDateFormat sfd=new SimpleDateFormat("dd/mm/yyyy");
//String t=sfd.format();
Date date=sfd.parse(inputDate);
SimpleDateFormat outputsfd=new SimpleDateFormat("yyyy mm dd");
String outputdate=outputsfd.format(date);
System.out.println("after changing the date to yyyy/mm/dd : " outputdate);
}catch(java.text.ParseException e){
System.out.println("error occured");
}
}
public static void main(String[] args) {
Scanner r=new Scanner(System.in);
System.out.println("enter date is dd/mm/yyyy : ");
String d=r.nextLine();
Condate(d);
r.close();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/400338.html
上一篇:使用forin迭代物件值并回傳最高值-我可以像for回圈一樣使用它嗎
下一篇:使組件的行為獨立
