>Java >java지도 시간 >셀 편집 후 사용자 정의 JTable 셀 렌더링을 어떻게 유지할 수 있습니까?

셀 편집 후 사용자 정의 JTable 셀 렌더링을 어떻게 유지할 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-07 13:27:131024검색

How Can I Maintain Custom JTable Cell Rendering After Cell Editing?

셀 편집 후 JTable 셀 렌더링 유지

JTable에서 사용자 정의 셀 렌더링 및 편집 기능을 구현하면 사용자 경험을 향상시킬 수 있습니다. 그러나 편집 작업 후에도 원하는 형식이 유지되는지 확인하는 것이 중요합니다.

문제

"가격" 형식을 지정하기 위한 사용자 정의 셀 렌더러를 설정한 후 열에서 사용자는 셀 편집 시 숫자 형식이 손실되는 불일치를 경험했습니다. 이러한 시나리오에서는 편집이 커밋된 후 셀 렌더러의 기본값이 적용되지 않을 수 있습니다.

해결책

셀 편집 후 사용자 정의 렌더링을 유지하려면, 적절한 이벤트 트리거와 클래스를 활용하는 것이 중요합니다. 편집이 완료되면 JTable의 editStopped() 메소드는 getCellEditorValue()를 통해 새 값을 수집합니다. 그런 다음 모델은 setValueAt()로 알림을 받고 이후에 fireTableCellUpdated()를 호출해야 합니다. 이 포괄적인 프로세스는 특별한 형식 요구 사항을 처리하기 위해 확장할 수 있는 렌더러를 호출합니다.

추가 고려 사항

더 복잡한 형식 요구 사항의 경우 인스턴스 활용을 고려하는 것이 좋습니다. 사용자 정의 렌더러를 편집기 구성 요소 자체로 사용합니다. 이를 통해 셀의 모양과 동작을 더 효과적으로 제어할 수 있어 셀 수정 후에도 일관된 서식이 보장됩니다.

다음 코드 스니펫은 셀의 모양과 동작을 보여주는 예제 구현을 제공합니다. JTable 셀에서 통화 값의 형식을 숫자로 지정합니다. 사용자 정의 렌더러(CurrencyRenderer)는 통화 형식을 처리하고 사용자 정의 편집기(CurrencyEditor)를 사용하면 사용자가 형식을 유지하면서 값을 편집할 수 있습니다.

import java.awt.Component;
import java.awt.event.MouseEvent;
import java.text.NumberFormat;
import javax.swing.DefaultCellEditor;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableCellRenderer;

// Custom cell renderer for currency formatting
public class CurrencyRenderer extends DefaultTableCellRenderer {

    private NumberFormat formatter;

    public CurrencyRenderer(NumberFormat formatter) {
        this.formatter = formatter;
        setHorizontalAlignment(JLabel.RIGHT);
    }

    @Override
    public void setValue(Object value) {
        setText((value == null) ? "" : formatter.format(value));
    }
}

// Custom cell editor for currency input, maintaining the formatting
public class CurrencyEditor extends DefaultCellEditor {

    private NumberFormat formatter;
    private JTextField textField;

    public CurrencyEditor(NumberFormat formatter) {
        super(new JTextField());
        this.formatter = formatter;
        textField = (JTextField) getComponent();
        textField.setHorizontalAlignment(JTextField.RIGHT);
        textField.setBorder(null);
    }

    @Override
    public Object getCellEditorValue() {
        try {
            return new Double(textField.getText());
        } catch (NumberFormatException e) {
            return Double.valueOf(0);
        }
    }

    @Override
    public Component getTableCellEditorComponent(JTable table,
            Object value, boolean isSelected, int row, int column) {
        textField.setText((value == null)
                ? "" : formatter.format((Double) value));
        return textField;
    }
}

이러한 기술을 통합함으로써 개발자는 사용자 정의 셀 렌더링을 보장할 수 있습니다. 및 편집 기능은 JTable에서 원활하게 작동하여 일관되고 사용자 친화적인 데이터 조작 경험을 제공합니다.

위 내용은 셀 편집 후 사용자 정의 JTable 셀 렌더링을 어떻게 유지할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.