2017-05-21 11 views
1

TableViewの特定の列のセルにリスナーを作成して、ポップアップ・ウィンドウに何らかのメッセージが表示されるようにします。これは、テーブルとその列を作成する方法です。javafxテーブルの特定の列のセルにホバー・リスナーを追加する

private TableView<Stock> stockTable = new TableView<>(); 
ObservableList columns = stockTable.getColumns(); 
public TableColumn createTextColumn(String columnName, String columnCaption,BooleanProperty editingStarted) { 
    TableColumn column = new TableColumn(columnCaption); 
    column.setCellValueFactory(new PropertyValueFactory<>(columnName)); 
    column.setCellFactory(TextFieldTableCell.forTableColumn()); 
    return column; 
} 
final TableColumn nameColumn 
         = createTextColumn("name", "Product Name", editingStarted); 
columns.add(nameColumn); 

だから、それを行うことが可能です。私は行のリスナーを作成する方法を知っています。しかし、私はテーブルの細胞を聞いてインターネット上で何も見つけませんでした。助けを前にありがとう。

答えて

1

あなたはすでにあなたは結果がこの

のように見えます

column.setCellFactory(CustomTextFieldTableCell.forTableColumn()); 

にコードを変更する必要があり、それを使用するには

import javafx.event.EventHandler; 
import javafx.scene.control.Label; 
import javafx.scene.control.TableCell; 
import javafx.scene.control.TableColumn; 
import javafx.scene.control.cell.TextFieldTableCell; 
import javafx.scene.input.MouseEvent; 
import javafx.stage.Popup; 
import javafx.util.Callback; 
import javafx.util.StringConverter; 
import javafx.util.converter.DefaultStringConverter; 

public final class CustomTextFieldTableCell<S, T> extends TextFieldTableCell<S, T> { 

    public static <S> Callback<TableColumn<S, String>, TableCell<S, String>> forTableColumn() { 
     return forTableColumn(new DefaultStringConverter()); 
    } 

    public static <S, T> Callback<TableColumn<S, T>, TableCell<S, T>> forTableColumn(final StringConverter<T> converter) { 
     return new Callback<TableColumn<S, T>, TableCell<S, T>>() { 
      @Override 
      public TableCell<S, T> call(TableColumn<S, T> list) { 
       final TextFieldTableCell<S, T> result = new TextFieldTableCell<S, T>(converter); 
       final Popup popup = new Popup(); 
       popup.setAutoHide(true); 

       final EventHandler<MouseEvent> hoverListener = new EventHandler<MouseEvent>() { 

        @Override 
        public void handle(MouseEvent event) { 
         final Label popupContent = new Label("this is a popup showing the content = '" + result.getText() + "'"); 
         popupContent.setStyle("-fx-background-color: #64b5f6; -fx-border-color: #000000; -fx-border-width: 1px; -fx-padding: 5px; -fx-text-fill: white;"); 

         popup.getContent().clear(); 
         popup.getContent().addAll(popupContent); 

         if (event.getEventType() == MouseEvent.MOUSE_EXITED) { 
          popup.hide(); 
         } else if (event.getEventType() == MouseEvent.MOUSE_ENTERED) { 
          popup.show(result, event.getScreenX() + 10, event.getScreenY());     
         } 
        } 
       }; 

       result.setOnMouseEntered(hoverListener); 
       result.setOnMouseExited(hoverListener); 
       return result; 
      } 
     }; 
    } 
} 

ニーズに合わせて書き換える必要がありTextFieldTableCell.forTableColumn()を使用しました

enter image description here

+0

ありがとうございました!それは多くの助けとなりました。 :) – Nazim

関連する問題