2014-10-06 2 views

답변

5

연속 공장을 사용하여에 툴팁을 추가 감사합니다 TableRow :

import javafx.application.Application; 
import javafx.beans.property.SimpleStringProperty; 
import javafx.collections.FXCollections; 
import javafx.collections.ObservableList; 
import javafx.geometry.Insets; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.control.Label; 
import javafx.scene.control.TableColumn; 
import javafx.scene.control.TableRow; 
import javafx.scene.control.TableView; 
import javafx.scene.control.Tooltip; 
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 final TableView<Person> table = new TableView<>(); 
    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) { 
     Scene scene = new Scene(new Group()); 
     stage.setTitle("Table View Sample"); 
     stage.setWidth(450); 
     stage.setHeight(500); 

     final Label label = new Label("Address Book"); 
     label.setFont(new Font("Arial", 20)); 

     table.setEditable(true); 

     table.setRowFactory(tv -> new TableRow<Person>() { 
      private Tooltip tooltip = new Tooltip(); 
      @Override 
      public void updateItem(Person person, boolean empty) { 
       super.updateItem(person, empty); 
       if (person == null) { 
        setTooltip(null); 
       } else { 
        tooltip.setText(person.getFirstName()+" "+person.getLastName()); 
        setTooltip(tooltip); 
       } 
      } 
     }); 

     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.setItems(data); 
     table.getColumns().addAll(firstNameCol, lastNameCol, emailCol); 

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

     ((Group) scene.getRoot()).getChildren().addAll(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); 
     } 
    } 
} 
0

동적 TableRow 구현을 만들 수 있습니다

import java.util.function.Function; 

import javafx.scene.control.TableRow; 
import javafx.scene.control.Tooltip; 

public class TooltipTableRow<T> extends TableRow<T> { 

    private Function<T, String> toolTipStringFunction; 

    public TooltipTableRow(Function<T, String> toolTipStringFunction) { 
    this.toolTipStringFunction = toolTipStringFunction; 
    } 

    @Override 
    protected void updateItem(T item, boolean empty) { 
    super.updateItem(item, empty); 
    if(item == null) { 
     setTooltip(null); 
    } else { 
     Tooltip tooltip = new Tooltip(toolTipStringFunction.apply(item)); 
     setTooltip(tooltip); 
    } 
    } 
} 

을 그리고처럼 설정 이 컨트롤러의 initialize()에서 :

personTableView.setRowFactory((tableView) -> { 
     return new TooltipTableRow<Person>((Person person) -> { 
     return person.getFirstName()+" "+person.getLastName(); 
     }); 
}); 
관련 문제