2016-12-25 12 views
0

32カラムのデータベースから動的なテーブルビューを作成したいのですが、最初のカラムには従業員の名前と31日目(チェックボックス)から従業員の出席をマークする残りのカラムが含まれます。使用して2列(名前、チェックボックス)をデータベースからテーブルビューを移入することができ得るとmethods.Hereを設定します。これは、User.javajavafxはチェックボックス付きのデータベースから動的なテーブルビューを取り込みます

public class User { 


     private final SimpleStringProperty ename; 
     private BooleanProperty day1; 

     User(String Ename,boolean day1) 
     { 
     this.ename = new SimpleStringProperty(Ename); 
     this.day1 = new SimpleBooleanProperty(day1); 

     this.day1.addListener(new ChangeListener<Boolean>() { 

      public void changed(ObservableValue<? extends Boolean> ov, Boolean t, Boolean t1) { 

       System.out.println(enameProperty().get() + " invited: " + t1); 
       System.out.println(); 
      } 

     });    

    } 


    public String getEname() { 
     return ename.get(); 
     } 


    public void setEname(String Ename) { 
    ename.set(Ename); 
    } 


    public BooleanProperty day1Property() { 
    return day1; 
    } 


    public StringProperty enameProperty() { 
    return ename; 
    } 
ある

String sql ="SELECT * FROM attendence"; 
    pst = (PreparedStatement) con.prepareStatement(sql); 
    rs=pst.executeQuery(); 

     while (rs.next()) { 
      //get string from db,whichever way 
      String name=rs.getString(3); 
      int day=rs.getInt(6); 
      data.add(new User(name,day!=0)); //converting integer to boolean and storing on data(Observable list) 
     } 

     etname.setCellValueFactory(new PropertyValueFactory<>("name")); 
     col.setCellValueFactory(new PropertyValueFactory<>("day1)); 

     col.setCellFactory(new Callback<TableColumn<User, Boolean>,  TableCell<User, Boolean>>() { 

     public TableCell<User, Boolean> call(TableColumn<User, Boolean> p) { 

      return new CheckBoxTableCell<User, Boolean>(); 

     } 
      }); 

      jTable.getColumns().add(etname,col); 
      jTable.setItems(data); 
      } 

コードです210

CheckBoxTableCell.java

public class CheckBoxTableCell<S, T> extends TableCell<S, T> { 

    private final CheckBox checkBox; 

    private ObservableValue<T> ov; 



    public CheckBoxTableCell() { 

     this.checkBox = new CheckBox(); 

     this.checkBox.setAlignment(Pos.CENTER); 



     setAlignment(Pos.CENTER); 

     setGraphic(checkBox); 

    } 



    @Override public void updateItem(T item, boolean empty) { 

     super.updateItem(item, empty); 

     if (empty) { 

      setText(null); 

      setGraphic(null); 

     } else { 

      setGraphic(checkBox); 

      if (ov instanceof BooleanProperty) { 

       checkBox.selectedProperty().unbindBidirectional((BooleanProperty) ov); 

      } 

      ov = getTableColumn().getCellObservableValue(getIndex()); 

      if (ov instanceof BooleanProperty) { 

       checkBox.selectedProperty().bindBidirectional((BooleanProperty) ov); 

      } 

     } 

    } 

} 

しかし、私は32列で何ができるか全く分かりません。 私は2つの問題について誰かから大きな助けが必要です。私はボタンが

  • JHON真真偽のように選択されたすべてのチェックボックスの状態とともに名前(isSelectedかどうか)をお読みくださいを押したとき、私はチェックボックス2)でデータベースから動的なテーブルビューを移入するにはどうすればよい 1) ... ....
  • は偽偽真... ..

  • ジョージ真真真偽

をバラ

回答をいただければ幸いです。事前に感謝します。 .. ..

答えて

0

このコードで試してください。ロードチェックボックスデータの場合

private static final List<String> groups = Arrays.asList("Group 1", "Group 2", "Group 3", "Group 4"); //declared an array 

    TableView<AttributeRow> attributeTable = new TableView<>(); //new Table 
    for (String group : groups) { //Creating dynamic column 
     TableColumn<AttributeRow, Boolean> groupColumn = new TableColumn<>(group); 
     groupColumn.setCellFactory(CheckBoxTableCell.forTableColumn(groupColumn)); 
     groupColumn.setCellValueFactory(cellData -> cellData.getValue().activeProperty(group)); 
     attributeTable.getColumns().add(groupColumn); 
    } 

とAttributeRowクラス

class AttributeRow { 

private final Map<String, BooleanProperty> activeByGroup = new HashMap<>(); 


public AttributeRow(List<String> companyGroups) { 
    for (String group : companyGroups) { 

     activeByGroup.put(group, new SimpleBooleanProperty()) ; 
    } 
} 

public final BooleanProperty activeProperty(String group) { 

    return activeByGroup.get(group) ; 
} 

public final boolean isActive(String group) { 
    return activeProperty(group).get(); 
} 

public final void setActive(String group, boolean active) { 
    activeProperty(group).set(active); 
} 

(trueまたはfalse)私たちは、以下の方法

あなたがからのデータを生成する方法を説明したことはありませんperfectly.But作業
  String sql ="SELECT * FROM attendence"; 
     pst = (PreparedStatement) con.prepareStatement(sql); 
     rs=pst.executeQuery(); 
     while (rs.next()) { 

       AttributeRow row = new AttributeRow(groups); 

       for(int j=0;j<5;j++) //here j<5 because array size =5 
          { 
           int i=j+6; 
          int day=rs.getInt(i); //getting Integer value(note:sqlite does not support boolean datatype so i stored as integer with 0 or 1) 

          row.setActive(day!=0); //converted into boolean useing day!=0 
          } 
          jTable.getItems().add(row); 

       } 
+0

すごいを使用することができますデータベース –

+0

Ok.Nowのコードを見て、私は答えを更新しました –

+0

うわあ、あなたが私の日を救ってくれてありがとう –