2016-04-30 107 views
3

私の目標は、ユーザがTableViewのセルをダブルクリックしてそのセルの情報を使用したときを検出することです。私の写真から、私はビール、醸造所、スタイルのテーブルを持っていることがわかります。javafxのtableviewセルにclickイベントを追加する方法

セルをダブルクリックすると、(ビール、ビールの)画像が表示されます。私はシーンビルダーも使用しているので、私はコントローラクラスを扱っています。これまで私が持っているのはこれですが運はありません。エラーはなく、私は基本的なテストを試みるときに情報を引き出すことはありません。

FYI:1つのセルのクリックを検出し、クリックされたセルからの情報のみをプルしたい - 行全体ではない。ここで

screenshot of table with beers and breweries

イベントのために私のコードです。

public void clickItem(MouseEvent event) { 
    tableID.setOnMouseClicked(new EventHandler<MouseEvent>() { 
     @Override 
     public void handle(MouseEvent event) { 
      System.out.println("Clicked on " + (tableID.getSelectionModel().getSelectedCells().get(0)).getColumn());   
     } 
    }); 
} 
+1

を意味していますか?あなたの方法はちょっと変わったようです。また、コードフラグメントをどこにポストすることができますか? 'tableID'とは何ですか?イベントハンドラを登録したアイテムをクリックすると少し似ています。 – hotzst

+0

はい、クリックするとprintlnが表示されません。私はコードを調整しましたが、まだ運がありません。これは単にデータベースを使用しているときにクリック機能をテストするだけです.2回クリックするとデータベースからJavaアプリケーションに情報を取得してテキスト領域に表示します。 – Jonathan

答えて

5

あなたは、なぜあなたはその方法にsetOnMouseClickedを使用している、シーンビルダ&コントローラクラスを使用している場合は?代わりにこれを試してみてください:

@FXML 
public void clickItem(MouseEvent event) 
{ 
    if (event.getClickCount() == 2) //Checking double click 
    { 
     System.out.println(tableID.getSelectionModel().getSelectedItem().getBeer()); 
     System.out.println(tableID.getSelectionModel().getSelectedItem().getBrewery()); 
     System.out.println(tableID.getSelectionModel().getSelectedItem().getCountry()); 
    } 
} 

これを実装するには、すべてのテーブルデータを保存する必要があります。コントローラクラスから、最初に各セルのデータ用のオブジェクトを作成します。まずコントローラクラスの次の行を書いてください:

ObservableList<TableData> data = FXCollections.observableArrayList(); 

次に、すべてのテーブルデータをループで追加します。ここで一つのデータを格納するための一例である:ここでは

data.add(new TableData("Beer","Brewery","Country")); 

TableDataクラスです:あなたは、クリックしたときに、 `println`が表示されていないことを

public class TableData 
{ 
    String beer; 
    String brewery; 
    String country; 

    public TableData(String beer, String brewery, String country) 
    { 
     super(); 
     this.beer = beer; 
     this.brewery = brewery; 
     this.country = country; 
    } 

    public String getBeer() 
    { 
     return beer; 
    } 
    public String getBrewery() 
    { 
     return brewery; 
    } 
    public String getCountry() 
    { 
     return country; 
    } 

} 
+0

私は私のPCにアクセスして知っているときにそれを試してみるつもりです。そしてテーブルのために私は既にクラスのためにあなたに感謝しました! – Jonathan

+0

この問題はありませんが、まだprintlnは表示されません。私はそれが印刷されていないか、選択されたセルを取得していないということが間違っています。 – Jonathan

+0

編集***私は謝罪し、これは完全に動作します。私はscenebuilder fxmlファイルを別の場所に保存していましたが、今までは実現しませんでした。どうもありがとうございました!しかし、好奇心の中で、それがダブルクリックされたときにビール名価値だけを返すために私は何を変えるだろうか。例えば、他の列をクリックした場合、私は醸造所や国の下をクリックしてもビール名を返します。ありがとうございます – Jonathan

関連する問題