java - make - JTable con mĂșltiples elementos en una celda
jtable component in java (4)
Me gusta crear una celda con una casilla de verificación y uno o dos campos de texto opcionales.
Si hago clic en la casilla, los campos de texto se vuelven visibles. Traté de hacer una imagen ASCII de cómo debería ser:
[ ]
[X] [some string]
[X] [value1] [value2]
Sé cómo crear un renderizador personalizado, pero no estoy seguro de cómo devolver varios elementos. Si tengo un procesador para una casilla de verificación, solo devuelvo el JCheckBox:
class BooleanRenderer extends JCheckBox implements TableCellRenderer, UIResource
{
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
// doing some stuff...
return this;
}
}
@Thomas et al. son correctos al distinguir entre el modelo y la vista . Su modelo incluye un estado booleano y algunos textos correspondientes; su vista es una JCheckBox
que se puede alternar y un texto que se puede cambiar. Necesitará un renderizador para mostrar el estado actual del modelo y un editor para permitir cambios en el estado.
En este ejemplo , la clase Value
contiene el estado seleccionado y los datos subyacentes, un valor Double
. DataModel
, que implementa TableModel
, administra una List<Value>
. Tenga en cuenta que tanto el editor como el procesador utilizan un java.text.DecimalFormat
común. La clase relacionada java.text.MessageFormat
puede ser útil para componer el texto de su casilla de verificación.
Debe devolver un único componente (que puede ser un JPanel en su caso) que contiene muchos otros componentes.
Vea el siguiente enlace donde un CellRenderer devuelve múltiples entradas (es un ListCellRenderer, pero los conceptos básicos son los mismos).
También debería representar esa estructura en su modelo de tabla, es decir, el valor de la celda ya debería ser un compuesto del indicador booleano y los otros valores.
Tu clase Renderer tendrá que devolver un componente principal (como uhm dijo, probablemente un JPanel) en el que tienes tus otros objetos: checkbox, textfields, etc. Tu tableModel tendrá que contener los valores que el Renderer usa para representar cada uno de esos componentes. Por ejemplo, el modelo puede configurarse con una Lista de objetos de datos, y cada entrada en la lista contiene un booleano para indicar si se selecciona CheckBox, una cadena de datos de campo de texto, etc. No se puede hacer que una tabla represente visualmente un útil Oscile el objeto si el modelo asociado no lo está almacenando en algún lugar.