Search in sources :

Example 1 with TextFieldTableCell

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);
}
Also used : ObjectProperty(javafx.beans.property.ObjectProperty) Callback(javafx.util.Callback) TextFieldTableCell(javafx.scene.control.cell.TextFieldTableCell) TableCell(javafx.scene.control.TableCell) ComboBoxTableCell(javafx.scene.control.cell.ComboBoxTableCell) TextFieldTableCell(javafx.scene.control.cell.TextFieldTableCell) Method(java.lang.reflect.Method) StringConverter(javafx.util.StringConverter) ComboBoxTableCell(javafx.scene.control.cell.ComboBoxTableCell)

Example 2 with TextFieldTableCell

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;
}
Also used : EventDispatcher(javafx.event.EventDispatcher) TextFieldTableCell(javafx.scene.control.cell.TextFieldTableCell)

Example 3 with 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();
}
Also used : TbmSysDaoDVO(kyj.Fx.dao.wizard.core.model.vo.TbmSysDaoDVO) StringConverter(javafx.util.StringConverter) MeerketAbstractVoOpenClassResourceView(com.kyj.fx.voeditor.visual.component.popup.MeerketAbstractVoOpenClassResourceView) IOException(java.io.IOException) TbpSysDaoMethodsDVO(kyj.Fx.dao.wizard.core.model.vo.TbpSysDaoMethodsDVO) BaseOpenClassResourceView(com.kyj.fx.voeditor.visual.component.popup.BaseOpenClassResourceView) TextFieldTableCell(javafx.scene.control.cell.TextFieldTableCell) ReadOnlyObjectWrapper(javafx.beans.property.ReadOnlyObjectWrapper) FXML(javafx.fxml.FXML)

Example 4 with TextFieldTableCell

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);
}
Also used : ObjectProperty(javafx.beans.property.ObjectProperty) Callback(javafx.util.Callback) TextFieldTableCell(javafx.scene.control.cell.TextFieldTableCell) TableCell(javafx.scene.control.TableCell) ComboBoxTableCell(javafx.scene.control.cell.ComboBoxTableCell) TextFieldTableCell(javafx.scene.control.cell.TextFieldTableCell) Method(java.lang.reflect.Method) StringConverter(javafx.util.StringConverter) ComboBoxTableCell(javafx.scene.control.cell.ComboBoxTableCell)

Example 5 with TextFieldTableCell

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;
}
Also used : TextFieldTableCell(javafx.scene.control.cell.TextFieldTableCell) PropertyValueFactory(javafx.scene.control.cell.PropertyValueFactory) TableColumn(javafx.scene.control.TableColumn)

Aggregations

TextFieldTableCell (javafx.scene.control.cell.TextFieldTableCell)6 StringConverter (javafx.util.StringConverter)4 Method (java.lang.reflect.Method)3 ObjectProperty (javafx.beans.property.ObjectProperty)3 TableCell (javafx.scene.control.TableCell)3 ComboBoxTableCell (javafx.scene.control.cell.ComboBoxTableCell)3 Callback (javafx.util.Callback)3 BaseOpenClassResourceView (com.kyj.fx.voeditor.visual.component.popup.BaseOpenClassResourceView)1 MeerketAbstractVoOpenClassResourceView (com.kyj.fx.voeditor.visual.component.popup.MeerketAbstractVoOpenClassResourceView)1 IOException (java.io.IOException)1 ReadOnlyObjectWrapper (javafx.beans.property.ReadOnlyObjectWrapper)1 EventDispatcher (javafx.event.EventDispatcher)1 FXML (javafx.fxml.FXML)1 TableColumn (javafx.scene.control.TableColumn)1 PropertyValueFactory (javafx.scene.control.cell.PropertyValueFactory)1 TbmSysDaoDVO (kyj.Fx.dao.wizard.core.model.vo.TbmSysDaoDVO)1 TbpSysDaoMethodsDVO (kyj.Fx.dao.wizard.core.model.vo.TbpSysDaoMethodsDVO)1