2014-10-09 8 views
2

지금 테이블 뷰에서 행을 선택하면 마우스 위치에 대화 상자가 나타납니다. 각 행 위로 마우스를 가져 가면 대화 상자가 나타나기 쉽습니다. CSS : hover가있는 것처럼 보입니다. 따라서 일부 용량의 Java 코드에서 잡힐 수 있다고 가정합니다.JavaFX TableView에서 행을 가져 가면 어떻게됩니까?

+0

MOUSE_ENTERED MouseEvent를 수신하십시오. –

답변

6

행의 호버 속성에 리스너를 추가하고 호버 상태가 변경 될 때 조치를 취하는 사용자 정의 테이블 행 팩터 리를 생성 할 수 있습니다. 여기

는 사용자가 테이블 행 가리킬로 라벨을 업데이트 몇 가지 예제 코드입니다 : 마우스 포인터가 (도시하지 않음) 엠마 존스의 행에 걸쳐 가리킬 샘플 이미지에서

table.setRowFactory(tableView -> { 
    final TableRow<Person> row = new TableRow<>(); 

    row.hoverProperty().addListener((observable) -> { 
     final Person person = row.getItem(); 

     if (row.isHover() && person != null) { 
      label.setText("Address Book: " 
       + person.getFirstName() + " " 
       + person.getLastName() 
      ); 
     } else { 
      label.setText("Address Book"); 
     } 
    }); 

    return row; 
}); 

를, 그래서 제목 헤더를 읽고 수정 "주소록 : 엠마 존스"

012 여기

hover sample

는 오라클 자바 FX의 TableView 튜토리얼의 샘플 코드에서 채택 된 전체 샘플입니다
import javafx.application.Application; 
import javafx.beans.property.SimpleStringProperty; 
import javafx.collections.*; 
import javafx.geometry.Insets; 
import javafx.scene.*; 
import javafx.scene.control.*; 
import javafx.scene.control.cell.PropertyValueFactory; 
import javafx.scene.layout.VBox; 
import javafx.scene.text.Font; 
import javafx.stage.Stage; 

public class TableViewSample extends Application { 

    private TableView<Person> table = new TableView<Person>(); 
    private final ObservableList<Person> data = 
     FXCollections.observableArrayList(
      new Person("Jacob", "Smith", "[email protected]"), 
      new Person("Isabella", "Johnson", "[email protected]"), 
      new Person("Ethan", "Williams", "[email protected]"), 
      new Person("Emma", "Jones", "[email protected]"), 
      new Person("Michael", "Brown", "[email protected]") 
     ); 

    public static void main(String[] args) { 
     launch(args); 
    } 

    @Override 
    public void start(Stage stage) { 
     final Label label = new Label("Address Book"); 
     label.setFont(new Font("Arial", 20)); 

     table.setEditable(true); 

     TableColumn<Person, String> firstNameCol = new TableColumn<>("First Name"); 
     firstNameCol.setMinWidth(100); 
     firstNameCol.setCellValueFactory(
       new PropertyValueFactory<>("firstName")); 

     TableColumn<Person, String> lastNameCol = new TableColumn<>("Last Name"); 
     lastNameCol.setMinWidth(100); 
     lastNameCol.setCellValueFactory(
       new PropertyValueFactory<>("lastName")); 

     TableColumn<Person, String> emailCol = new TableColumn<>("Email"); 
     emailCol.setMinWidth(200); 
     emailCol.setCellValueFactory(
       new PropertyValueFactory<>("email")); 

     table.setRowFactory(tableView -> { 
      final TableRow<Person> row = new TableRow<>(); 
      row.hoverProperty().addListener((observable) -> { 
       final Person person = row.getItem(); 
       if (row.isHover() && person != null) { 
        label.setText(
         "Address Book: " 
           + person.getFirstName() + " " 
           + person.getLastName() 
        ); 
       } else { 
        label.setText("Address Book"); 
       } 
      }); 

      return row; 
     }); 

     table.setItems(data); 
     table.getColumns().addAll(firstNameCol, lastNameCol, emailCol); 

     final VBox vbox = new VBox(10); 
     vbox.setPadding(new Insets(10)); 
     vbox.getChildren().addAll(label, table); 

     Scene scene = new Scene(vbox); 
     stage.setScene(scene); 
     stage.show(); 
    } 

    public static class Person { 

     private final SimpleStringProperty firstName; 
     private final SimpleStringProperty lastName; 
     private final SimpleStringProperty email; 

     private Person(String fName, String lName, String email) { 
      this.firstName = new SimpleStringProperty(fName); 
      this.lastName = new SimpleStringProperty(lName); 
      this.email = new SimpleStringProperty(email); 
     } 

     public String getFirstName() { 
      return firstName.get(); 
     } 

     public void setFirstName(String fName) { 
      firstName.set(fName); 
     } 

     public String getLastName() { 
      return lastName.get(); 
     } 

     public void setLastName(String fName) { 
      lastName.set(fName); 
     } 

     public String getEmail() { 
      return email.get(); 
     } 

     public void setEmail(String fName) { 
      email.set(fName); 
     } 
    } 
} 
관련 문제