Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

【JavaFX8】 ListViewにCheckBoxを含め、Button押下でCheckBoxのisSelectedを判定する方法、誰かご存じないでしょうか。

JavaFX8 でアプリを作成しています。

現在ListViewに配置したCheckBoxの選択状態を取得する
ことができなく、困っております。

ListViewにCheckBoxを含め、ListViewと同じ階層の
Button押下でCheckBox.CheckBox.isSelectedを判定する
方法、または参考になるサイトご存じないでしょうか。

より簡潔なサンプルを作って確認しているのですが、ど
うしていいのかわからない状態です。

どなたかお助けいただけたら幸いで御座います。

■ファイル一覧
Main.java
test.java
CheckItemController.java
test.fxml
CheckItemController.fxml

■クラス
test
test.CheckItem
test.Collection
LoginController

■test.java
package ayh.view;

import java.io.IOException;
import java.io.UncheckedIOException;
import java.net.URL;
import java.util.ResourceBundle;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;

public class test implements Initializable

{
    private ObservableList<CheckItem> itemList 
= FXCollections.observableArrayList();
    @FXML
    private ListView<CheckItem> list;
    @FXML
    public void OnButtonClick()
    {
        
System.out.println(list.getItems().get(0).isChecke
d);
        
System.out.println(list.getItems().get(1).isChecke
d);
    }

    @Override
    public void initialize(URL location, 
ResourceBundle resources)
    {
        list.setEditable(true);
        list.setItems(itemList);
        list.setCellFactory(param -> new 
Collection());
        itemList.add(new 
CheckItem("name1",true));
        itemList.add(new 
CheckItem("name2",false));
    }
    class CheckItem
    {

        public String name;
        public boolean isChecked;

        public CheckItem(String str, 
boolean bool)
        {
            this.name = str;
            this.isChecked = bool;
        }
    }
    
    class Collection extends 
ListCell<CheckItem>
    {
        private CheckItemController 
controller;
        @Override
        protected void 
updateItem(CheckItem item, boolean empty)
        {
            super.updateItem(item, 
empty);
            if (empty || item == null)
            {
                // 空になったので
表示する内容はなし
                setGraphic(null);
                setText(null);
                controller = null;
                return;
            }

            if (controller == null || 
getGraphic() == null)
            {
                // コントローラか
GraphicがなければFXMLからNodeと一緒に作成
                try
                {
                    FXMLLoader 
fxmlLoader = new FXMLLoader();
                    Node node 

fxmlLoader.load(ItemController.class.getResourceAs
Stream("CheckItemController.fxml"));
                    controller 
= fxmlLoader.getController();
                    
setGraphic(node);
                    
controller.update(item);
                }
                catch (IOException 
e)
                {
                    throw new 
UncheckedIOException(e);
                }
            }
            else
            {
                // すでにある場合
は新しく作らずに使い回し
                
controller.update(item);
            }
        }
    }
}

■LoginController.java
package ayh.view;

import java.io.IOException;
import java.util.ArrayList;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import ayh.dataBase.DBHelper;
import ayh.model.AccountEntity;

public class LoginController
{
    String    ikeyAppDirectoryName    = 
"ikeyAppDirectory";
    String    DatabaseDirectoryName    = 
"Database";
    String    databeseFileName        = 
"databese.db";
    AccountEntity account;
    public LoginController()
    {
        DBHelper helper = new 
DBHelper(ikeyAppDirectoryName, 
DatabaseDirectoryName, databeseFileName);

        int i = 0;
        boolean bool = true;
        for (AccountEntity item : 
helper.queryAccount())
        {
            i++;
            if 
(item.get_Id().equals("test"))
            {
                bool = false;
            }
        }

        if (i == 0 || bool)
        {
            AccountEntity entity = new 
AccountEntity();
            entity.set_Id("test");
            
entity.set_Name("kentaro");
            entity.set_Pass("test");
            ArrayList<AccountEntity> 
list = new ArrayList<AccountEntity>();
            list.add(entity);
            helper.addAccount(list);
        }

        this.account = 
helper.queryAccount().get(0);
    }

    VBox                root;

    @FXML
    private Label        testLabel;
    @FXML
    private TextField    id;

    @FXML
    public void OnLoginButton(ActionEvent 
event)
    {
        RegsterViewController v = new 
RegsterViewController();
        
Main.presentStage.setScene(v.createScene());
        Main.presentStage.show();
    }

    public Scene createScene()
    {
        Scene scene = null;
        try
        {
            // タイトル
            
Main.presentStage.setTitle("Sample");
            root = (VBox) 
FXMLLoader.load(Main.class.getResource("LoginView.
fxml"));
            scene = new Scene(root);
            
scene.getStylesheets().add(getClass().getResource(
"application.css").toExternalForm());
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        return scene;
    }

    public void show()
    {
    }

}

■test.fxml
<Pane maxHeight="-Infinity" maxWidth="-Infinity" 
minHeight="-Infinity" minWidth="-Infinity" 
prefHeight="400.0" prefWidth="600.0" 
xmlns="http://javafx.com/javafx/8.0.40" 
xmlns:fx="http://javafx.com/fxml/1" 
fx:controller="ayh.view.test">
   <children>
      <ListView fx:id="list" layoutX="112.0" 
layoutY="100.0" prefHeight="200.0" 
prefWidth="200.0" />
      <Button layoutX="99.0" layoutY="61.0" 
mnemonicParsing="false" onAction="#OnButtonClick" 
text="Button" />
   </children>
</Pane>

■CheckItemController.fxml
<Pane maxHeight="-Infinity" maxWidth="-Infinity" 
minHeight="-Infinity" minWidth="-Infinity" 
xmlns="http://javafx.com/javafx/8.0.40" 
xmlns:fx="http://javafx.com/fxml/1" 
fx:controller="ayh.view.CheckItemController">
   <children>
      <Label fx:id="name" layoutX="68.0" 
layoutY="67.0" text="Label" />
      <CheckBox fx:id="checkbox" 
mnemonicParsing="false" text="CheckBox" />
   </children>
</Pane>

1

回答

1876

閲覧

1件の回答

評価

0

すみません匿名になってしまいました。
質問者です。
よろしくお願いします。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。