javafx 2.0 표 (TableView) 에 선택 단 추 를 표시 합 니 다 (CheckBox)
JFX 표 에 사용자 정의 셀 (TableCell) 을 표시 하려 면 javafx. scene. control. TableCell 에 계 승 된 사용자 정의 셀 을 구현 해 야 합 니 다. JFX 공식 은 TableView 에 목록 / 옵션 단추 / 텍스트 상자 와 같은 일반적인 컨트롤 을 제공 하지 않 았 습 니 다. 이 컨트롤 이 필요 하 다 면 다른 항목 에서 이 컨트롤 을 다운로드 할 수 있 습 니 다. 참조: http://www.javafxdata.org .(아래 코드 의 실현 참고 www.javafxdata.org
먼저 체크 박스 를 표시 할 TableCell 을 정의 합 니 다.
/* CheckBoxTableCell.java 1.0 2010-2-2
*
* Copyright (c) 2012 by Chen Zhiwu
* All rights reserved.
*
* The copyright of this software is own by the authors.
* You may not use, copy or modify this software, except
* in accordance with the license agreement you entered into
* with the copyright holders. For details see accompanying license
* terms.
*/
public class CheckBoxTableCell<S, T> extends TableCell<S, T> {
private final CheckBox checkBox;
private final boolean showText;
private final Callback<T, String> toString;
private final Callback<Integer, ObservableValue<Boolean>> getSelectedProperty;
private ObservableValue<Boolean> booleanProperty;
public CheckBoxTableCell() {
this(null, null);
}
public CheckBoxTableCell(
Callback<Integer, ObservableValue<Boolean>> toString) {
this(toString, null);
}
public CheckBoxTableCell(
Callback<Integer, ObservableValue<Boolean>> getSelectedProperty,
Callback<T, String> toString) {
this.getSelectedProperty = getSelectedProperty;
this.toString = toString;
this.showText = toString != null;
this.checkBox = new CheckBox();
setAlignment(Pos.CENTER);
setGraphic(checkBox);
if (showText) {
checkBox.setAlignment(Pos.CENTER_LEFT);
}
}
public CheckBoxTableCell(
Callback<T, ObservableValue<Boolean>> callback,
Callback<Integer, ObservableValue<Boolean>> getSelectedProperty,
Callback<T, String> toString) {
this.getSelectedProperty = getSelectedProperty;
this.toString = toString;
this.showText = toString != null;
this.checkBox = new CheckBox();
setAlignment(Pos.CENTER);
setGraphic(checkBox);
if (showText) {
checkBox.setAlignment(Pos.CENTER_LEFT);
}
}
@Override
protected void updateItem(T item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setText(null);
setGraphic(null);
return;
}
if (this.showText) {
setText(this.toString.call(item));
}
setGraphic(this.checkBox);
if (this.booleanProperty instanceof BooleanProperty)
this.checkBox.selectedProperty().unbindBidirectional(
(BooleanProperty) this.booleanProperty);
ObservableValue localObservableValue = getSelectedProperty();
if (localObservableValue instanceof BooleanProperty) {
this.booleanProperty = localObservableValue;
this.checkBox.selectedProperty().bindBidirectional(
(BooleanProperty) this.booleanProperty);
}
this.checkBox.visibleProperty().bind(getTableView().editableProperty()
.and(getTableColumn().editableProperty())
.and(editableProperty()));
};
private ObservableValue getSelectedProperty() {
return ((this.getSelectedProperty != null) ? (ObservableValue) this.getSelectedProperty
.call(Integer.valueOf(getIndex())) : getTableColumn()
.getCellObservableValue(getIndex()));
}
}
CellFactory 는 편리 한 방법 으로 외부 에서 CheckBoxTableCell 을 편리 하 게 사용 할 수 있 습 니 다.
/* CellFactory.java 1.0 2010-2-2
*
* Copyright (c) 2012 by Chen Zhiwu
* All rights reserved.
*
* The copyright of this software is own by the authors.
* You may not use, copy or modify this software, except
* in accordance with the license agreement you entered into
* with the copyright holders. For details see accompanying license
* terms.
*/
public class CellFactory {
////// table check box
public static <S> Callback<TableColumn<S, Boolean>, TableCell<S, Boolean>> tableCheckBoxColumn() {
return tableCheckBoxColumn(null, null);
}
public static <S, T> Callback<TableColumn<S, T>, TableCell<S, T>> tableCheckBoxColumn(
Callback<Integer, ObservableValue<Boolean>> paramCallback) {
return tableCheckBoxColumn(paramCallback, null);
}
public static <S, T> Callback<TableColumn<S, T>, TableCell<S, T>> tableCheckBoxColumn(
Callback<Integer, ObservableValue<Boolean>> paramCallback,
boolean paramBoolean) {
Callback<T, String> callback = new Callback<T, String>() {
@Override
public String call(T t) {
return ((t == null) ? "" : t.toString());
}
};
return tableCheckBoxColumn(paramCallback, callback);
}
public static <S, T> Callback<TableColumn<S, T>, TableCell<S, T>> tableCheckBoxColumn(
final Callback<Integer, ObservableValue<Boolean>> getSelectedProperty,
final Callback<T, String> toString) {
return new Callback<TableColumn<S, T>, TableCell<S, T>>() {
@Override
public TableCell<S, T> call(TableColumn<S, T> paramTableColumn) {
return new CheckBoxTableCell<S,T>(getSelectedProperty,toString);
}
};
}
}
테스트 에 사용 할 실체 클래스 를 정의 합 니 다.
public class Goods{//
private boolean available;//
private BooleanProperty hotSaleProperty;//
public boolean getAvailable(){
return avaliable;
}
public void setAvailable(boolean newValue){
this.available=newValue;
}
public boolean getHotSale(){
return hotSaleProperty.get();
}
public boolean setHotSale(boolean newValue){
hotSaleProperty.set(newValue);
}
}
외부 에 서 는 CheckBoxTableCell 을 사용 합 니 다.
TableColumn<Goods, Boolean> availableColumn=new TableColumn<Goods, Boolean>(" ");
col.setCellValueFactory(new PropertyValueFactory<Goods,Boolean>("available");
col.setCellFactory(CellFactory.tableCheckBoxColumn(new Callback<Integer, ObservableValue<Boolean>>() {
@Override
public ObservableValue<Boolean> call(Integer index) {
final Goods g= table.getItems().get(index);
ObservableValue<Boolean> retval = new SimpleBooleanProperty(g,"available",g.getAvailable());
retval.addListener(new ChangeListener<Boolean>() {
@Override
public void changed(
ObservableValue<? extends Boolean> observable,
Boolean oldValue, Boolean newValue) {
g.setAvailable(newValue);
}
});
return retval;
}
}));
TableColumn<Goods, Boolean> hotSaleColumn=new TableColumn<Goods, Boolean>(" ");
col.setCellValueFactory(new PropertyValueFactory<Goods,Boolean>("hotSale");
col.setCellFactory(CellFactory.tableCheckBoxColumn());
위의 두 열 은 서로 다른 바 인 딩 방법 을 사용 합 니 다. 첫 번 째 열 은 Goods 의 boolean 속성 에 대해 유효 합 니까? 이 속성 은 JFX 의 동적 바 인 딩 을 지원 하지 않 기 때문에 열 을 정의 할 때 Callback 을 만들어 속성 을 동적 으로 업데이트 합 니 다.
두 번 째 열 "잘 팔 리 는 지 여부" 는 Goods 의 boolean 속성 hotSaleProperty 에 대응 합 니 다. 이 속성 은 JFX 의 동적 바 인 딩 을 지원 합 니 다. 열 을 정의 할 때 어떠한 수정 도 하지 않 아 도 실체 와 표 의 바 인 딩 을 실현 할 수 있 습 니 다.
위의 예 에서 볼 수 있 듯 이 새로운 JFX 에서 실체 류 원생 이 JFX 를 지원 하 는 바 인 딩 유형 이 데이터 바 인 딩 을 실현 하 는 데 편리 할 것 입 니 다.
JFX 에서 사용자 정의 단일 선택 상자 의 구현 입 니 다. 목록 (ListView) 과 트 리 (TreeView) 의 구현 도 유사 합 니 다.
참고 읽 기:
JFX 데이터 바 인 딩: http://docs.oracle.com/javafx/2.0/binding/jfxpub-binding.htm
데이터 바 인 딩 에 사용 할 JFX 프레임 워 크: http://www.javafxdata.org
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Swift 5. 스위프트 일지 (2)View에 있는 component (e.g. textfield, progress bar)의 변화를 custom ViewController에 전달할 때 간단하고 reusable하게 만들기 위해 사용되는 패턴이다. 이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.