首先
HyperlinkCell要继承TableCell
import java.util.Map;
import javafx.beans.property.StringProperty;
import javafx.beans.value.ObservableValue;
import javafx.geometry.Pos;
import javafx.scene.control.Hyperlink;
import javafx.scene.control.TableCell;
public class HyperlinkCell<S, T> extends TableCell<S, T> {
private Hyperlink hyperlink;
private ObservableValue<T> ov;
private Map<String,String> vmap;
public Map<String, String> getVmap() {
return vmap;
}
public void setVmap(Map<String, String> vmap) {
this.vmap = vmap;
}
public HyperlinkCell() {
this.hyperlink = new Hyperlink();
this.hyperlink.setUnderline(true);
setAlignment(Pos.CENTER);
setGraphic(hyperlink);
}
@Override
protected void updateItem(T item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setText(null);
setGraphic(null);
} else {
setGraphic(hyperlink);
ov = getTableColumn().getCellObservableValue(getIndex());
if (ov instanceof StringProperty) {
hyperlink.setText(ov.getValue().toString());
}
//得到cell那一行的数据
vmap = (Map<String,String>)this.getTableRow().getItem();
//给cell的字体赋值
if(vmap.get("TEXT_COLOR")!=null){
if(!vmap.get("TEXT_COLOR").equals("")){
hyperlink.setStyle("-fx-text-fill: "+vmap.get("TEXT_COLOR"));
}
}
//给cell的背景色赋值
if(vmap.get("BACKGROUND_COLOR")!=null){
if(!vmap.get("BACKGROUND_COLOR").equals("")){
this.setStyle("-fx-background-color: "+vmap.get("BACKGROUND_COLOR"));
}
}
}
}
}
相信表格中嵌多选的例子挺多的,可以自己搜索 一下。
以下,是动态创建表格列的过程,部分代码片段如下:
tableColu = new TableColumn<>(title); tableColu.setCellValueFactory(new MapValueFactory(id)); if("hyperlink".equalsIgnoreCase(Columntype)){ tableColu.setCellFactory(new Callback<TableColumn<String, Boolean>, TableCell<String, Boolean>>() { @Override public TableCell<String, Boolean> call(TableColumn<String, Boolean> param) { final HyperlinkCell<String, Boolean> cell = new HyperlinkCell<>(); final Hyperlink radio = (Hyperlink) cell.getGraphic(); radio.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { Map m = new HashMap<String,String>(); Map<String,String> rowmap = cell.getVmap();//可以得到表格中一行的数据
Dialogs d = new DialogsImpl();//自己实现弹出窗口m.put("123",rowmap.get("colname"));//
d.showDialog(m, w, h);
}
});
return cell;
}
});
}