поддержание рендеринга Jtable Cell после редактирования ячейки
в jtable, реализация пользовательских элементов рендеринга ячейки и редактирования может улучшить пользовательский опыт. Тем не менее, крайне важно убедиться, что желаемое форматирование сохраняется даже после операций редактирования.
проблема
После настройки пользовательского визуализации ячейки для форматирования «ценовой» столбцы пользователи столкнулись с несоответствием, где чисел формат был потерян на эдютинг ячейки. В таких сценариях значение по умолчанию визуализатора ячейки не может быть применено после совершения редактирования.
решение
для поддержания пользовательского рендеринга после редактирования ячейки, необходимо использовать надлежащие триггеры события и классы. При завершении редактирования метод jtable editingstopped () собирает новое значение через getcelleditorvalue (). Затем модель уведомляется с помощью setValueat () и должна впоследствии вызовать FireTableCellupdated (). Этот комплексный процесс вызывает рендеринг, который можно расширить для удовлетворения специальных потребностей форматирования.
дополнительные соображения
для более сложных требований к форматированию форматирования рекомендуется рассмотреть возможность использования экземпляра пользовательского рендеринга в качестве самого компонента редактора. Это позволяет обеспечить больший контроль над внешним видом и поведением ячейки, обеспечивая согласованное форматирование даже после модификаций ячейки.
пример
. Следующий код фрагмент предоставляет пример реализации, которая демонстрирует, как форматировать значения валюты в виде чисел в ячейках JTable. Пользовательский рендерер (CurrencyRenderer) обрабатывает форматирование валюты, в то время как пользовательский редактор (CurrenceDitor) позволяет пользователям редактировать значения при поддержании форматирования. Импорт java.awt.event.mouseeVent; импортировать java.text.numberformat; Импорт javax.swing.defaultcelleditor; импортировать javax.swing.jtable; импортировать javax.swing.jtextfield; импортировать javax.swing.table.defaulttablecellrenderer; // пользовательский рендеринг сотовой связи для форматирования валюты Public Class CurrencyRenderer Extens DefaultTableCellRenderer { частное формат формата; public VurranceRenderer (формат NumberFormat) { this.formatter = formatter; SethorizontalAlignment (jlabel.right); } @Override public void setValue (значение объекта) { setText ((значение == null)? "": formatter.format (value)); } } // пользовательский редактор ячейки для ввода валют, поддержание форматирования открытый класс currencyeditor Extends defaultCelleditor { частное формат формата; Private Jtextfield Textfield; Public Currenceeditor (формат NumberFormat) { Super (New JTextField ()); this.formatter = formatter; TextField = (JTextField) getComponent (); Textfield.sethorizontalAlignment (jtextfield.right); Textfield.Setborder (null); } @Override public Object getCellEditorValue () { пытаться { вернуть новый Double (textfield.getText ()); } catch (numberFormateXception e) { вернуть Double.valueof (0); } } @Override публичный компонент getTableDitorComponent (Jtable Table, Значение объекта, логическое исчезновено, int row, int column) { Textfield.settext ((значение == null) ? "": formatter.format ((двойное) значение)); вернуть Textfield; } }
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; } }]
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3