Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

131
Vistas
Configuración de un editor JComboBox usando TableModelListener

Quería configurar mi segunda columna como editor JComboBox usando TableModelListener . También quería cambiar el modelo de ComboBox en la segunda columna según el ComboBox seleccionado en la primera columna. Aquí implementé un Listener que escucha la primera columna.

 private class TableScheduleListener implements TableModelListener { //Listening for data changes. @Override public void tableChanged(TableModelEvent e) { int row = e.getFirstRow(); int column = e.getColumn(); } if(column == 1) { for(int i = 0; i < createScheduleView.tblSchedule.getRowCount(); i++) { createScheduleView.tblSchedule.getCellEditor(i, 2); } int col = createScheduleView.tblSchedule.convertColumnIndexToModel(2); if(col == 2 && createScheduleView.tblSchedule.getRowCount() < 7) { DefaultComboBoxModel cbModel = new DefaultComboBoxModel(createScheduleModel.setData().toArray()); createScheduleView.cbBreakStartTime.setModel(cbModel); } } }

Pero estoy pensando en cómo puedo configurar JComboBox como editor en mi segunda columna. Después de la configuración, ¿es el modelo? Cualquier ayuda sería apreciada.

ACTUALIZAR

Seguí los consejos de camickr de https://tips4java.wordpress.com/2009/06/28/combo-box-table-editor/ Pero quería anular TableCellEditor de una clase diferente.

 private class TableScheduleEditor extends JTable { // Determine editor to be used by row @Override public TableCellEditor getCellEditor(int row, int column) { int modelColumn = convertColumnIndexToModel(column); if(modelColumn == 2 && row < 7) { DefaultComboBoxModel model = new DefaultComboBoxModel(createScheduleModel.setData().toArray()); createScheduleView.getCbBreakStartTime().setModel(model); return new DefaultCellEditor(createScheduleView.getCbBreakStartTime()); } else return super.getCellEditor(row, column); }; }

Estoy pensando cómo esta clase puede registrarse en mi JTable. Traté de registrar esto en mi constructor this.createScheduleView.tblSchedule.setCellEditor(new TableScheduleEditor()); Pero dice que no se puede convertir a TableCellEditor porque extiende JTable. ¿Algún truco para hacer esto?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

También quería cambiar el modelo de ComboBox en la segunda columna según el ComboBox seleccionado en la primera columna

Anule el método getCellEditor(...) de JTable para devolver el editor adecuado.

He aquí un ejemplo básico para empezar:

 import java.awt.*; import java.util.List; import java.util.ArrayList; import javax.swing.*; import javax.swing.event.*; import javax.swing.border.*; import javax.swing.table.*; public class TableComboBoxByRow extends JPanel { List<String[]> editorData = new ArrayList<String[]>(3); public TableComboBoxByRow() { setLayout( new BorderLayout() ); // Create the editorData to be used for each row editorData.add( new String[]{ "Red", "Blue", "Green" } ); editorData.add( new String[]{ "Circle", "Square", "Triangle" } ); editorData.add( new String[]{ "Apple", "Orange", "Banana" } ); // Create the table with default data Object[][] data = { {"Color", "Red"}, {"Shape", "Square"}, {"Fruit", "Banana"}, {"Plain", "Text"} }; String[] columnNames = {"Type","Value"}; DefaultTableModel model = new DefaultTableModel(data, columnNames); JTable table = new JTable(model) { // Determine editor to be used by row public TableCellEditor getCellEditor(int row, int column) { int modelColumn = convertColumnIndexToModel( column ); if (modelColumn == 1 && row < 3) { JComboBox<String> comboBox1 = new JComboBox<String>( editorData.get(row)); return new DefaultCellEditor( comboBox1 ); } else return super.getCellEditor(row, column); } }; JScrollPane scrollPane = new JScrollPane( table ); add( scrollPane ); } private static void createAndShowUI() { JFrame frame = new JFrame("Table Combo Box by Row"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add( new TableComboBoxByRow() ); frame.setSize(200, 200); frame.setLocationByPlatform( true ); frame.setVisible( true ); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { createAndShowUI(); } }); } }

En el ejemplo anterior, el "modelo" cambia según la fila que se está editando.

En su caso, deberá modificar la lógica para devolver el editor en función del valor en la primera columna.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda