use of javafx.scene.control.cell.TextFieldTableCell in project Gargoyle by callakrsos.
the class IExcelScreenHandler method valueMapper.
/**
* 테이블컬럼의 row에 해당하는 데이터가 무엇인지 정의한 값에 따라 엑셀에 표현됨.
*
* StringConverter를 이용한 TableCell인경우 정의된 StringConvert를 이용한 데이터를 Excel의
* Cell에 쓰고, StringConverter를 이용하지않는 UI의 TableCell의 경우 데이터셋에 바인드된 값을 사용하게됨.
*
* 작성된 API내에서 적절한 값이 아니라고 판단되는경우 Ovrride해서 재정의하도록한다.
*
* @작성자 : KYJ
* @작성일 : 2016. 9. 9.
* @param table
* 사용자 화면에 정의된 tableView
* @param column
* 사용자 화면에 정의된 tableColumn
* @param columnIndex
* 사용자 화면에 정의된 tableColumn의 인덱스
* @param rowIndex
* 사용자 화면에 정의된 tableCell의 인덱스
* @return Object 테이블셀에 정의된 데이터를 리턴할 값으로, 리턴해주는 값이 엑셀에 write된다.
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
public default default <T> Object valueMapper(TableView<?> table, TableColumn<?, ?> column, int columnIndex, int rowIndex) {
Callback cellFactory = column.getCellFactory();
if (cellFactory != null) {
TableCell cell = (TableCell) cellFactory.call(column);
if (cell != null) {
StringConverter converter = null;
if (cell instanceof TextFieldTableCell) {
TextFieldTableCell txtCell = (TextFieldTableCell) cell;
converter = txtCell.getConverter();
} else // }
if (cell instanceof ComboBoxTableCell) {
ComboBoxTableCell txtCell = (ComboBoxTableCell) cell;
converter = txtCell.getConverter();
} else // else if (cell instanceof HyperlinkTableCell) {
// HyperlinkTableCell txtCell = (HyperlinkTableCell) cell;
// converter = txtCell.getConverter();
// }
/* else 기본값. */
{
try {
Method m = cell.getClass().getMethod("converterProperty");
if (m != null) {
Object object = m.invoke(cell);
if (object != null && object instanceof ObjectProperty) {
ObjectProperty<StringConverter> convert = (ObjectProperty<StringConverter>) object;
converter = convert.get();
}
}
} catch (Exception e) {
// Nothing...
}
}
if (converter != null) {
Object cellData = column.getCellData(rowIndex);
return converter.toString(cellData);
}
}
}
return column.getCellData(rowIndex);
}
use of javafx.scene.control.cell.TextFieldTableCell in project Gargoyle by callakrsos.
the class CrudBaseColumnMapper method textField.
private TextFieldTableCell<T, Object> textField(Class<?> classType, String columnName, IOptions naming) {
TextFieldTableCell<T, Object> textFieldTableCell = new TextFieldTableCell<T, Object>() {
/*
* (non-Javadoc)
*
* @see javafx.scene.control.cell.TextFieldTableCell#startEdit()
*/
@Override
public void startEdit() {
Object vo = tableViewProperty().get().getItems().get(getIndex());
if (vo instanceof AbstractDVO) {
AbstractDVO _abstractvo = (AbstractDVO) vo;
if (Objects.equals(CommonConst._STATUS_CREATE, _abstractvo.get_status())) {
// 아래와 같은형태가 되어선안됨.
// if (annotationClass != null &&
// naming.editable(columnName)) {
// 새로 추가된 항목은 NotEditable항목 편집가능하게 함.
boolean editable = naming.editable(columnName);
if (!editable)
return;
super.startEdit();
LOGGER.debug("start Edit");
} else if (Objects.equals(CommonConst._STATUS_UPDATE, _abstractvo.get_status())) {
boolean editable = naming.editable(columnName);
if (!editable)
return;
NonEditable annotationClass = getAnnotationClass(_abstractvo.getClass(), NonEditable.class, columnName);
if (annotationClass != null) {
LOGGER.debug("non start Edit");
} else {
super.startEdit();
LOGGER.debug("start Edit");
}
}
} else {
LOGGER.debug("start Edit");
super.startEdit();
}
}
};
StringConverter<Object> converter = naming.stringConverter(columnName);
if (converter == null) {
textFieldTableCell.setConverter(converter(textFieldTableCell, classType));
} else {
textFieldTableCell.setConverter(converter);
}
EventDispatcher originalDispatcher = textFieldTableCell.getEventDispatcher();
textFieldTableCell.setEventDispatcher((event, tail) -> {
return textFieldCellEventDispatcher(textFieldTableCell, originalDispatcher, event, tail);
});
return textFieldTableCell;
}
use of javafx.scene.control.cell.TextFieldTableCell in project Gargoyle by callakrsos.
the class DaoWizardViewController method initialize.
@FXML
public void initialize() {
tbParams.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
// this.colProgramTypeLock.setCellValueFactory(v ->
// v.getValue().lockYnProperty());
// this.colProgramTypeLock.setCellFactory(v ->{
// return
// });
tbmSysDaoDVOProperty = new SimpleObjectProperty<>(new TbmSysDaoDVO());
colParamTestValue.setCellFactory(TextFieldTableCell.forTableColumn());
methodDesc.setCellFactory(TextFieldTableCell.forTableColumn());
methodName.setCellFactory(TextFieldTableCell.forTableColumn());
// [시작] 넘버링 컬럼
colMethodNo.setCellValueFactory(new NumberingCellValueFactory<>(tbMethods.getItems()));
/*
* 2015-11-02 기존에 사용하던 NumberingCellValueFactory을 적용할 수 없음.
* colParamNo컬럼같은경우는 method에 따라 데이터의 주소값이 바뀌는 타입이라 주소값이 바뀌는 상태에선 적절한 넘버링
* 데이터가 화면에 보여주지않음. 하여 주소값을 계속 유지시킬 수 있도록 tbMethods에서 선택된 메소드정보에서 값을
* 참조하여 넘버링을 시킴.
*
* 2016-04-19 파람의 아이템을 삭제하고 다시 호출했을때 인덱스 순서가 맞지않던 버그 fix
*/
colParamNo.setCellValueFactory(param -> {
return new ReadOnlyObjectWrapper<Integer>(tbParams.getItems().indexOf(param.getValue()) + 1);
});
// [끝] 넘버링 컬럼
colParamTypes.setCellFactory(ChoiceBoxTableCell.forTableColumn("Nomal", "Arrays"));
// 텍스트의 내용이 변경되면 메모리에 적재시키기 위한 이벤트 함수.
// 2015.11.17 키 이벤트가 눌릴때 처리되지않게함, 타이밍 문제가 있어, 저장시에 문제가 있음.
// txtSql.getCodeArea().setOnKeyPressed();
txtSql.getCodeArea().setOnKeyReleased(event -> {
if (!event.isShortcutDown()) {
TbpSysDaoMethodsDVO selectedMethodItem = getSelectedMethodItem();
if (selectedMethodItem != null)
selectedMethodItem.setSqlBody(txtSql.getText());
}
});
StringConverter<String> classConverter = new StringConverter<String>() {
@Override
public String toString(String clazz) {
if (clazz == null || clazz.isEmpty())
return "";
String result = clazz;
int lastIndexOf = clazz.lastIndexOf('.');
if (lastIndexOf >= 0) {
result = clazz.substring(lastIndexOf + 1);
}
return result;
}
@Override
public String fromString(String clazz) {
return clazz;
}
};
// 메소드 컬럼에서 Result Vo Class를 더블클릭한경우 VO참조를 걸 수 있도록 팝업창을 뜨는 로직 포함되있음.
colResultVoClass.setCellFactory(param -> {
TextFieldTableCell<TbpSysDaoMethodsDVO, String> textFieldTableCell = new TextFieldTableCell<>();
textFieldTableCell.setOnMouseClicked(event -> {
if (event.getClickCount() == 2) {
String clazz = textFieldTableCell.getItem();
try {
BaseOpenClassResourceView view = null;
if (ValueUtil.isNotEmpty(clazz)) {
view = new MeerketAbstractVoOpenClassResourceView(clazz);
} else {
view = new MeerketAbstractVoOpenClassResourceView();
}
view.setConsumer(str -> {
if (str == null || str.isEmpty())
return;
try {
int selectedItem = tbMethods.getSelectionModel().getSelectedIndex();
tbMethods.getItems().get(selectedItem).setResultVoClass(str);
} catch (Exception e) {
DialogUtil.showExceptionDailog(e, "로드할 수 없는 클래스 유형입니다.");
return;
}
});
ResultDialog<String> show = view.show();
show.consume();
} catch (Exception e) {
e.printStackTrace();
}
}
});
textFieldTableCell.setConverter(classConverter);
return textFieldTableCell;
});
colResultVoClass.setCellValueFactory(param -> param.getValue().resultVoClassProperty());
// SQL 에디터 마우스 클릭이벤트, 선택한 메소드 항목이 없다면 Editable을 활성화 시키지않는다.
txtSql.getCodeArea().setOnMouseClicked(event -> {
if (!event.isShortcutDown()) {
int selectedMethodIndex = getSelectedMethodIndex();
if (selectedMethodIndex == -1) {
txtSql.getCodeArea().setEditable(false);
} else {
txtSql.getCodeArea().setEditable(true);
}
}
});
// 2016-08-27 custom 항목 추가. 이 항목추가시 typeMapping.properties 파일의 항목도 추가야함.
ObservableList<String> collect = DatabaseTypeMappingResourceLoader.getInstance().getEntry().stream().map(v -> v.getValue().toString()).distinct().collect(FxCollectors.toObservableList());
collect.addAll(Arrays.asList("Integer", "Long", "Double"));
colProgramType.setCellFactory(ChoiceBoxTableCell.forTableColumn(collect));
lblMessage.setText(MSG_NO_WARNNING);
// 메뉴등록작업
applyContextMenu();
}
use of javafx.scene.control.cell.TextFieldTableCell in project Gargoyle by callakrsos.
the class FxTableViewUtil method getValue.
/**
* 테이블컬럼의 row에 해당하는 데이터가 무엇인지 정의한 값을 리턴.
*
* StringConverter를 이용한 TableCell인경우 정의된 StringConvert를 이용한 데이터를 Excel의
* Cell에 쓰고, StringConverter를 이용하지않는 UI의 TableCell의 경우 데이터셋에 바인드된 값을 사용하게됨.
*
* 작성된 API내에서 적절한 값이 아니라고 판단되는경우 Ovrride해서 재정의하도록한다.
*
* @작성자 : KYJ
* @작성일 : 2016. 9. 9.
* @param table
* 사용자 화면에 정의된 tableView
* @param column
* 사용자 화면에 정의된 tableColumn
* @param columnIndex
* 사용자 화면에 정의된 tableColumn의 인덱스
* @param rowIndex
* 사용자 화면에 정의된 tableCell의 인덱스
* @return Object 테이블셀에 정의된 데이터를 리턴할 값으로, 리턴해주는 값이 엑셀에 write된다.
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
public static Object getValue(TableView<?> table, TableColumn<?, ?> column, int rowIndex) {
Callback cellFactory = column.getCellFactory();
if (cellFactory != null) {
TableCell cell = (TableCell) cellFactory.call(column);
if (cell != null) {
StringConverter converter = null;
if (cell instanceof TextFieldTableCell) {
TextFieldTableCell txtCell = (TextFieldTableCell) cell;
converter = txtCell.getConverter();
} else if (cell instanceof ComboBoxTableCell) {
ComboBoxTableCell txtCell = (ComboBoxTableCell) cell;
converter = txtCell.getConverter();
} else /* else 기본값. */
{
try {
Method m = cell.getClass().getMethod("converterProperty");
if (m != null) {
Object object = m.invoke(cell);
if (object != null && object instanceof ObjectProperty) {
ObjectProperty<StringConverter> convert = (ObjectProperty<StringConverter>) object;
converter = convert.get();
}
}
} catch (Exception e) {
// Nothing...
}
}
if (converter != null) {
Object cellData = column.getCellData(rowIndex);
return converter.toString(cellData);
}
}
}
return column.getCellData(rowIndex);
}
use of javafx.scene.control.cell.TextFieldTableCell in project Gargoyle by callakrsos.
the class BaseColumnMapper method generateTableColumns.
/**
* 컬럼 제너레이터
*
* @Date 2015. 10. 8.
* @param classType
* @return
* @User KYJ
*/
@Override
public TableColumn<T, ?> generateTableColumns(Class<?> classType, String columnName, IOptions options) {
TableColumn tableColumn = new TableColumn<>();
// 2015.11.18 커스텀 컬럼은 cellFactory를 가져다 쓰지않음.
tableColumn.setCellFactory(cell -> {
TextFieldTableCell<T, Object> textFieldTableCell = new TextFieldTableCell<>();
textFieldTableCell.setConverter(converter(classType));
return textFieldTableCell;
});
// 2015.11.18 커스텀 컬럼값을 정의한경우 대체.
TableColumn<T, ?> customTableColumn = options.customTableColumn(columnName);
if (customTableColumn != null) {
tableColumn = customTableColumn;
}
// 2015.11.18 커스텀 컬럼은 ValueFactory는 기본적으로 사용
PropertyValueFactory<T, ?> value = new PropertyValueFactory<>(columnName);
tableColumn.setCellValueFactory(value);
tableColumn.setId(columnName);
// 컬럼의 속성을 정의
setColumnProperty(tableColumn, columnName, options);
tableColumn.setResizable(true);
tableColumn.setEditable(false);
tableColumn.setVisible(options.visible(columnName));
return tableColumn;
}
Aggregations