我正在开发一个javaFx项目,我们必须使用它ObservableList来添加Listners.ObservableList包括人的模型.但我想通过序列化将整个Object 存储ObservableList在一个文件中.但它给了我一个例外.我还对对象模型进行了序列化,但没有运气.是否有任何序列化ObservableList的方法?
package com.company.Model;
import javax.persistence.*;
import java.io.Serializable;
/**
 * Created by Sunny on 1/8/2016.
 */
@Entity
@Table(name = "Employee", schema = "", catalog = "PUBLIC")
public class EmployeeEntity implements Serializable {
    private String empId;
    private String empAddress;
    private String empNumber;
    private String empFirstName;
    private String empLastName;
    public EmployeeEntity(String empId, String empAddress, String empNumber, String empFirstName, String empLastName) {
        this.empId = empId;
        this.empAddress = empAddress;
        this.empNumber = …我是一名半初学者 Java 程序员,从各种来源学习 Java FX。在我的程序中,我想创建一个 ComboBox,并使用 ArrayList 中一系列对象的 toString() 输出填充选项。在这里,披萨配料被定义为一个对象。它们被创建并存储在一个 PizzaMgr 对象中,基本上是一个 ArrayList 的美化包装器:
public class Topping{
  private String name;
  public Topping(String a){
    this.name=a;
  }
  public String toString(){
    return this.name;
  }
}
//=================================================
import java.util.ArrayList;
public class PizzaMgr{
  private ArrayList<Topping> OrderedToppings;
  public PizzaMgr(){
      OrderedToppings = new ArrayList<Topping>();
      OrderedToppings.add(new Topping("Pepperoni"));
      OrderedToppings.add(new Topping("Mushrooms"));
      OrderedToppings.add(new Topping("Onions"));
  }
  public ArrayList<Topping> getList(){
      return OrderedToppings;
  }
}
到现在为止还挺好。但我遇到的问题是当我想要一个 ComboBox 列出 PizzaMgr 的 ArrayList 中的所有项目时。理想情况下,我想使用这个 ComboBox 构造函数:
ComboBox<T>(ObservableList<T> items)
问题?如何将所有 ArrayList 项提取到 Observable List 中?我一直在阅读 Arraylists、Observable Lists、接口,但我不知道如何让它工作。我读过 …
ListChangeListener的JavaDoc提供了一个用于处理更改的模板.但是,我不知道如何处理排列.对于每个索引,我都可以找到项目的新索引所在的位置,但我不知道如何处理它.这是一个独立于编程语言的难题.ObservableList只能添加(),remove(),set(),还有一个迭代器.
如果我有一个原始列表[1,2,3],并将list []绑定到它,则绑定列表[1,2,3]需要匹配它.如果原始列表的比较器被交换,原始列表现在读取[3,2,1],我如何使绑定列表跟随?
/**
 * Binds a source list's elements to a destination list. Any changes made in
 * the source list will reflect in the destination list.
 *
 * @param <SRC> The source list's object type.
 * @param <DEST> The destination list's object type.
 * @param dest The destination list that will be bound to the src list.
 * @param src The source list to watch for changes, and propagate up to the
 * destination list.
 * @param transformer …我有一个用 Kotlin 编写的 JavaFX 应用程序。该应用程序显示了一个都有日期的账单清单:
data class Bill(
    val date: LocalDate
    // ...
)
账单存储在一个可观察列表中,由过滤列表包装。
我希望用户能够设置过滤账单的日期范围。除此之外,我希望该范围在修改基础账单列表时自动更改。该日期范围的下限和上限被保存为属性。
我已经尝试了两种方法:
分配通过读取当前属性值过滤日期的单个谓词。当日期范围更改时,这不会重新过滤列表。如果有一种方法可以强制过滤列表在发生这种情况时重新过滤,那就太好了。
绑定谓词属性,以便在更改范围属性时更新。这会导致在修改或访问账单时从过滤列表中抛出ArrayIndexOutOfBoundsExceptions 或NoSuchElementExceptions。我不太明白为什么会发生这种情况,以及所有这些绑定背后到底发生了什么。
这是正在发生的事情的简化示例:
import javafx.application.Application
import javafx.beans.binding.Bindings
import javafx.beans.binding.ObjectBinding
import javafx.beans.property.SimpleObjectProperty
import javafx.collections.FXCollections
import javafx.collections.ObservableList
import javafx.collections.transformation.FilteredList
import javafx.stage.Stage
import java.time.LocalDate
import java.util.function.Predicate
data class Bill(
    val date: LocalDate
)
class Example : Application() {
    private val bills: ObservableList<Bill> = FXCollections.observableArrayList()
    private val filteredBills: FilteredList<Bill> = FilteredList(bills)
    val latestBillDateBinding: ObjectBinding<LocalDate?> =
        Bindings.createObjectBinding({
            bills.maxOfOrNull { it.date } …我在一个observable列表中有几个复制元素,我在TableView中用于复制/粘贴操作.表的名称是cpTable(c opy和p aste T able),用于存储复制的元素和粘贴存储在表中的元素.每次粘贴操作后,我想清除cpTable的内容,然后用Ctrl + C复制其他选定的项目.但我总是得到错误:
JavaFX应用程序线程"java.lang.UnsupportedOperationException:不支持.
在com.sun.javafx.scene.control.ReadOnlyUnbackedObservableList.remove(ReadOnlyUnbackedObservableList.java:246)
这是我的伪代码:
if (cpTable !=null) {
    //first, get all copied items for removing all elements 
    ObservableList<String> copiedItems = cpTable.getItems();                                 
    int size = copiedItems.size();
    // remove all elements 
    for(int i=0;i<size;i++) {
        copiedItems.remove(i);
    }
    cpTable.setItems(copiedItems); //clear cpTable by setting an empty list
}
这是一种复制所选项目内容并将其放入cpTable的方法
public TableView<String> copySelectionToClipboard(TableView<String> table) {            
    ObservableList<String> data =     table.getSelectionModel().getSelectedItems();             
    TableView<String> tmp = new TableView<>();
    tmp.setItems(data);
    return tmp;
}
按下Ctrl + C时,以下行将所有复制的项目放在cpTable中:
cpTable = copySelectionToClipboard( (TableView<String>) keyEvent.getSource()); …我有可观察的清单ObservableList<Integer> list = FXCollections.observableArrayList().
在getter方法中,list我想返回只读的可观察列表,如:
public ObservableList<Integer> getReadOnlyList() {
     return readOnlyObservableList(list);
}
然后听只读列表
getReadOnlyList().addListener(listChangeListener);
所以基本上我想返回与原始列表同步的ObservableList列表,以便用户可以注册ListChangeListener和观察更改事件,但同时阻止用户更改原始列表.
通过连接,我的意思是获取一个新列表,该列表侦听所有连接部分的更改.
方法的目的是FXCollections#concat(ObservableList<E>... lists)什么?如果它只是合并了几个列表,那么我认为没有任何意义可以为此设置单独的方法.
如果考虑做我想做的事情,那么它不起作用:
import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
public class ConcatObservabeList {
   public static void main(String[] args) {
      ObservableList<Integer> list1 = FXCollections.observableArrayList();
      ObservableList<Integer> list2 = FXCollections.observableArrayList();
      ObservableList<Integer> concat = FXCollections.concat(list1, list2);
      concat.addListener(new ListChangeListener<Integer>() {
         public void onChanged(Change<? extends Integer> c) {
            System.out.println("changed");
         }
      });
      list1.add(12);
   }
}
当试图宣布一个新的ObservableList:
ObservableList<Account> userAccounts = new FXCollections.observableArrayList();
我收到一个错误observableArrayList();,上面写着:
找不到符号,符号:class
observableArrayList,location:classFXCollections.
这是我的import语句
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
这是我的方法
public ObservableList<Account> getUsersAccounts(int memberID) { 
    ObservableList<Account> userAccounts = new FXCollections.observableArrayList();
    try {     
        Statement stmt = conn.createStatement();            
        String sql = "SELECT * FROM account WHERE member_id='" + memberID + "'";            
        ResultSet rs = stmt.executeQuery(sql);
        while(rs.next()) {
            Account account = new Account(rs.getInt("member_id"), rs.getString("account_type"), rs.getDouble("balance"));
            userAccounts.add(account);
        }
    } catch (SQLException ex) {
        Logger.getLogger(JDBCManager.class.getName()).log(Level.SEVERE, null, ex);
    }
    return userAccounts;
}
我错过了什么,为什么我不能申报新的ObservableList …
当我将侦听器附加到可观察列表并在该侦听器中尝试删除某些元素时,在某些情况下它会通过,在某些情况下它会崩溃。
场景: 项目已从列表中删除。它触发侦听器,并在该侦听器中我尝试删除另一个项目。
有人遇到过类似的问题吗?您有任何提示、建议或解决方法吗?
我知道您可以同时删除两者,但问题是在侦听器中我需要检测哪些项目也需要删除,所以我在那里删除 i 。
这是 ObservableList 中的错误吗?
我希望它总是有效,或者至少总是崩溃。
这是代码示例:
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class ListRemoveFromListener extends Application {
    boolean changing = false;
    @Override
    public void start(Stage primaryStage) throws Exception {
        VBox vbox = new VBox();
        Button buttonSuccess = new Button("remove success");
        buttonSuccess.setOnAction(e -> {
            removeSuccess();
        });
        Button buttonBreak = new Button("Remove breaks");
        buttonBreak.setOnAction(e -> {
            removeBreaks();
        });
        vbox.getChildren().addAll(buttonSuccess, buttonBreak);
        Scene …我正在尝试使用 checkMenuItems 的数组列表填充 javaFX 中的多个 MenuButton。要添加我正在执行的检查菜单项:
myMenuButton.getItems().addAll(ChecKMenuItemList);
这就是我的代码的样子
class Scratch {
    private void updateClassList(ArrayList<Class> classArrayList) {
        ArrayList<String> classCodeList = new ArrayList<>();
        ArrayList<CheckMenuItem> checkMenuItemList = new ArrayList<>();
        ArrayList<CheckMenuItem> checkMenuItemList2 = new ArrayList<>();
        ArrayList<String> classNameList = new ArrayList<>();
        //Create Arrays of class elements
        for(Class aClass : classArrayList){
            checkMenuItemList.add(new CheckMenuItem(aClass.getClassCode()));
        }
        //Clear Class Lists
        addStudentsToClassClassListView.getItems().clear();
        assignClassesToTeachersClassListView.getItems().clear();
        //Populate dropdown lists
        addStudentSelectClassesMenuButton.getItems().setAll(checkMenuItemList);
        addTeacherSelectClasses.getItems().setAll(checkMenuItemList);
    }
}
在用户输入解析数据的 json 文件后,从另一个函数调用此函数。
我遇到的问题是,当我尝试使用.getItems().addAll()它只能工作一次时,在我的代码中,如果您注释两行中的一行,另一行将工作,反之亦然,这很奇怪,因为它们单独工作但不能一起工作
由于它们都是独立工作的,所以我不确定问题是什么导致它不太更新。没有错误或异常,什么也没有发生。在这两行执行之后和函数完成之前,调试时显示两个菜单按钮都有 6 个项目,但是当您单击菜单按钮时没有任何反应
javafx ×10
observablelist ×10
java ×5
javafx-8 ×2
arraylist ×1
combobox ×1
concat ×1
constructor ×1
data-binding ×1
kotlin ×1
list ×1
removeall ×1