2013-05-25 5 views
0

이미 이와 비슷한 질문이 있지만 내 문제는 약간 다릅니다. 나는 그것을 사용하기 위해 속성을 사용하고 관찰 가능한 목록에서 그것을 업데이트하지 않을 것이다. 원래 질문은 here입니다.JavaFX 행이 업데이트되지 않음

그래서 나는 다음과 같이 테이블 사이에 행을 전송하고 때 : 첫 번째 행이 표시되지만 것이다

Row transferring

첫 번째 행은 갱신하지 후 1가 같은 사람을 일으킬 것보다 더 많은 추가 할 때 이 :

Row transferring with the bug

그래도 열을 이동 될 때만 다시 나타납니다. AddRemoveButtons에 대한

//Loot identification 
    TableColumn lootIdentCol = new TableColumn<>("Identification"); 

    TableColumn<ItemDef, Integer> lootIDCol = new TableColumn<>("ID"); 
    lootIDCol.setCellValueFactory(
      new PropertyValueFactory<ItemDef, Integer>("id")); 

    TableColumn<ItemDef, String> lootNameCol = new TableColumn<>("Name"); 
    lootNameCol.setCellValueFactory(
      new PropertyValueFactory<ItemDef, String>("name")); 

    lootIdentCol.getColumns().addAll(lootNameCol, lootIDCol); 

    //Loot price 
    TableColumn<ItemDef, Integer> lootPriceCol = new TableColumn<>("Price"); 
    lootPriceCol.setCellValueFactory(
      new PropertyValueFactory<ItemDef, Integer>("price")); 

    //To loot items table 
    toLootItemsTableView.getColumns().addAll(lootIdentCol, lootPriceCol); 
    grid.add(toLootItemsTableView, 0, 1); 

    //Lootable items table 
    lootableItemsTableView.getColumns().addAll(lootIdentCol, lootPriceCol); 
    grid.add(lootableItemsTableView, 2, 1); 

    toLootItemsTableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); 
    lootableItemsTableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); 
    lootableItemsTableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); 
    toLootItemsTableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); 

    lootableTableList.add(new ItemDef("Ab", 141, false, false)); 
    lootableTableList.add(new ItemDef("Ac", 25, false, false)); 
    lootableTableList.add(new ItemDef("AD", 262, false, false)); 

    AddRemoveButtons<ItemDef> addRemoveLootButtons = new AddRemoveButtons<>(
      lootableTableList, lootableItemsTableView.getSelectionModel(), 
      toLootTableList, toLootItemsTableView.getSelectionModel() 
    ); 

코드 :

private final ObservableList<E> fromList; 
private final ObservableList<E> toList; 

public AddRemoveButtons(final ObservableList<E> fromList, final SelectionModel<E> from, 
         final ObservableList<E> toList, final SelectionModel<E> to) { 
    this.fromList = fromList; 
    this.toList = toList; 

    setAlignment(Pos.CENTER); 
    setPadding(new Insets(5, 5, 5, 5)); 
    setSpacing(15); 

    ObservableList<Node> children = getChildren(); 

    Button moveInto = new Button("Add"); 
    moveInto.setOnMouseClicked(new EventHandler<MouseEvent>() { 
     @Override 
     public void handle(MouseEvent mouseEvent) { 
      if (from instanceof MultipleSelectionModel) { 
       MultipleSelectionModel<E> multipleFrom = (MultipleSelectionModel<E>) from; 
       ObservableList<Integer> selectedIndices = multipleFrom.getSelectedIndices(); 
       for (int i : selectedIndices) 
        transfer(i, true); 
      } else 
       transfer(from.getSelectedIndex(), true); 
     } 
    }); 

    Button delete = new Button("Del"); 
    delete.setOnMouseClicked(new EventHandler<MouseEvent>() { 
     @Override 
     public void handle(MouseEvent mouseEvent) { 
      if (to instanceof MultipleSelectionModel) { 
       MultipleSelectionModel<E> multipleFrom = (MultipleSelectionModel<E>) to; 
       ObservableList<Integer> selectedIndices = multipleFrom.getSelectedIndices(); 
       for (int i : selectedIndices) 
        transfer(i, false); 
      } else 
       transfer(to.getSelectedIndex(), false); 
     } 
    }); 

    children.addAll(moveInto, delete); 
} 

private void transfer(int index, boolean forward) { 
    if (forward) 
     toList.add(fromList.remove(index)); 
    else 
     fromList.add(toList.remove(index)); 
} 

ItemDef 필적, 직렬화, 식별 구현 : 그것은 그 일을 계속하는 이유

private final String name; 
private final int  id; 
private final boolean members; 
private final boolean stackable; 
private  int  price; 

public ItemDef(JSONObject jsonObject) { 
    this(
      (String) jsonObject.get("name"), 
      Integer.parseInt((String) jsonObject.get("id")), 
      Boolean.parseBoolean((String) jsonObject.get("members")), 
      Boolean.parseBoolean((String) jsonObject.get("stackable")) 
    ); 
} 

public ItemDef(String name, int id, boolean members, boolean stackable) { 
    this.name = name; 
    this.id = id; 
    this.members = members; 
    this.stackable = stackable; 
    price = -1; 
} 

public String getName() { 
    return name; 
} 

@Override 
public int getId() { 
    return id; 
} 

public boolean isMembers() { 
    return members; 
} 

public boolean isStackable() { 
    return stackable; 
} 

public int getPrice() { 
    return price != -1 ? price : updatePrice(); 
} 

//Other methods not relevant 
+1

[Java 8] (https://jdk8.java.net/download.html)에서 작동합니까? 그렇지 않다면 [SSCCE] (http://sscce.org/) – jewelsea

+0

과 함께 [버그 신고] (https://javafx-jira.kenai.com)를 원할 수도 있습니다. 전반적으로 실제로 악화되지만, 두 가지 항목을 볼 수 있습니다. 하지만 여전히 버그가 있으며 왼쪽 테이블에서 항목을 선택할 수도 없습니다. 누군가에게 도움이된다면 좀 더 많은 코드도 추가했습니다. 그렇지 않다면, 나는 단지 그것을보고 할 것이다. – Muhatashim

답변

2

알아 냈어.

여러 테이블에서 동일한 TableColumn을 참조 할 수 없습니다.

0

여러 테이블에서 데이터를 업데이트하려면 열이 아닌 데이터 세트를 공유하려는 경우 여러 테이블의 열을 공유하면 안됩니다.

관련 문제