렌더링 편집 번호: 셀 편집 후 JTable 형식 유지
사용자 정의 셀 렌더링으로 JTable을 확장하는 경우 해당 렌더링을 유지하는 것이 중요합니다. 셀 편집 후. 여기에는 셀 렌더러 내의 서식 유지가 포함됩니다.
문제:
사용자 정의 셀 렌더러로 서식이 지정된 JTable 열에 대해 JTextField 편집기를 구현한 후 셀의 사용자 정의가 손실됩니다. 편집 시 렌더링
해결책:
모델이 셀 값 변경 시 렌더러를 업데이트하지 않기 때문에 서식이 손실됩니다. 이 문제를 해결하려면 테이블 모델이 변경된 후 셀 렌더러가 호출되는지 확인하세요.
구현:
예제 코드:
제공된 예제 코드는 JTable을 생성하여 이러한 접근 방식을 보여줍니다. 셀 편집 후에도 서식을 유지하는 통화 형식 열 사용:
import javax.swing.*; import java.awt.*; import java.awt.event.MouseEvent; import java.text.NumberFormat; import java.util.EventObject; public class RenderEditNumber extends JPanel { private NumberFormat nf = NumberFormat.getCurrencyInstance(); public RenderEditNumber() { DefaultTableModel model = new DefaultTableModel( new String[]{"Amount"}, 0) { @Override public Class<?> getColumnClass(int columnIndex) { return Double.class; } }; for (int i = 0; i < 16; i++) { model.addRow(new Object[]{Double.valueOf(i)}); } JTable table = new JTable(model) { @Override // Always selectAll() public boolean editCellAt(int row, int column, EventObject e) { boolean result = super.editCellAt(row, column, e); final Component editor = getEditorComponent(); if (editor == null || !(editor instanceof JTextComponent)) { return result; } EventQueue.invokeLater(new Runnable() { @Override public void run() { ((JTextComponent) editor).selectAll(); } }); return result; } }; table.setDefaultRenderer(Double.class, new CurrencyRenderer(nf)); table.setDefaultEditor(Double.class, new CurrencyEditor(nf)); add(new JScrollPane(table)); } public static void main(String[] args) { EventQueue.invokeLater(() -> new RenderEditNumber().display()); } } 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)); } } 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!