2017-11-06 16 views
0

JavaFXにListSelectionView(ControlsFXライブラリから)があり、特定のボタンをクリックしたときに値のセットを表示する必要があります。 initializeメソッドで内容を追加すると値が表示されます。しかし、ボタンのイベントアクションメソッドに同じコードを配置すると、そのコードは表示されません。 ListSelectionViewからSource項目とTarget項目を取得して表示する別の方法があります。 ListSelectionViewに何も表示されていない場合でも、getSourceItems()メソッドは一連の値を返し、表示されます。ListSelectionViewにObservableListの内容が表示されない

public class FXMLDocumentController implements Initializable { 

    @FXML 
    private Label label; 
    @FXML 
    private Button button; 
    @FXML 
    private JFXListView<Label> listv; 
    @FXML 
    private ListSelectionView<Label> abc; 


    @FXML 
    private void handleButtonAction(ActionEvent event) { 
     System.out.println("You clicked me!"); 
     label.setText("Hello World!"); 
    } 

    @Override 
    public void initialize(URL url, ResourceBundle rb) { 

    }  

    @FXML 
    private void handleToggle(MouseEvent event) { 

     ObservableList<Label> users = FXCollections.observableArrayList(); 


     abc.setSourceHeader(new Label("Present")); 
      abc.setTargetHeader(new Label("Absent")); 

     for (int i=0; i<4;i++) 
     { 
      users.add(new Label("Name "+i)); 
     } 
     abc.setSourceItems(users); 
     abc.setDisable(false); 
     for (int i=0; i<4;i++) 
     { 
      Label k = new Label("Hello"+i); 
      listv.getItems().add(k); 

     } 
    } 

    @FXML 
    private void handlenewNOde(MouseEvent event) { 

     ObservableList<Label> users1 =abc.getSourceItems(); 
     System.out.println("Source items"); 
     for(int i =0; i<users1.size(); i++) 
     { 
      Label k=users1.get(i); 
      System.out.println(k.getText()); 
     } 
     System.out.println("Target items"); 
     ObservableList<Label> users12 =abc.getTargetItems(); 

     for(int i =0; i<users12.size(); i++) 
     { 
      Label k=users12.get(i); 
      System.out.println(k.getText()); 
     } 
    } 

} 

.fxml:

<?xml version="1.0" encoding="UTF-8"?> 

<?import com.jfoenix.controls.JFXButton?> 
<?import com.jfoenix.controls.JFXListView?> 
<?import javafx.scene.control.Button?> 
<?import javafx.scene.control.Label?> 
<?import javafx.scene.layout.AnchorPane?> 
<?import org.controlsfx.control.ListSelectionView?> 

<AnchorPane id="AnchorPane" prefHeight="680.0" prefWidth="914.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.141" fx:controller="listselectionviewtryout.FXMLDocumentController"> 
    <children> 
     <Button fx:id="button" layoutX="14.0" layoutY="21.0" onAction="#handleButtonAction" text="Click Me!" /> 
     <Label fx:id="label" layoutX="17.0" layoutY="54.0" minHeight="16" minWidth="69" /> 
     <JFXListView fx:id="listv" layoutX="131.0" layoutY="35.0" prefHeight="237.0" prefWidth="75.0" /> 
     <JFXButton layoutX="413.0" layoutY="58.0" onMouseClicked="#handleToggle" text="Toggle Extension" /> 
     <JFXButton layoutX="445.0" layoutY="134.0" onMouseClicked="#handlenewNOde" text="new Node" /> 
     <ListSelectionView fx:id="abc" layoutX="226.0" layoutY="262.0" /> 
    </children> 
</AnchorPane> 

はJFXListViewを無視します。 出力:

Source items 
Name 0 
Name 1 
Name 2 
Name 3 
Target items 

enter image description here

+0

であるべき'ListView'の' cellFactory'です。なぜ 'Label'ではなく' String'を使うのはなぜですか? – Sedrick

+0

https://stackoverflow.com/questions/34838341/javafx-custom-cell-factory-with-custom-objects – Sedrick

+0

特に理由はありません。ストリングで試してみました。出力の変更はありません。@ SedrickJefferson – Suzume

答えて

0

abc.setSourceItems(users); 

あなたはあなたが `graphic`を設定する場所Label`が、私は見ていない`使用している

abc.getSourceItems().addAll(users); 
+0

私はこの変更であなたのコードを実行し、それは私のために働いた。 – Sedrick

+0

元のコードはなぜ機能しないのですか? –

+0

わかりません。私はjavadocを読んだ。 setSourceItemsは下線モデルを設定します。私はこのコードで動作するはずだと思った。 – Sedrick

関連する問題