Antes de hacer mi pregunta voy a tratar y que explica lo que necesito y estoy tratando de hacer. He creado una tabla donde hay varias columnas mostrando un combobox como muestra la imagen:

imagen http://www.freeimagehosting.net/newuploads/4ks9s.png

Se supone que es esto para crear una «orden» para los trabajos en este sentido, Job 1 ir primero a la Estación 1. Si añado la Estación 4 en la Estación 2 de la Columna que se vaya a la Estación 4, y así sucesivamente. Es la intención de crear un orden para su posterior procesamiento. Así que, yo quiero:

  • Crear la tabla y mostrar el renderizado de las combobox;
  • Hacer que las celdas de las columnas (3-6), no modificable, si la columna anterior tiene un valor de «ninguno» (así asegurarse de que se mantiene un orden correcto);
  • No mostrar una Estación que ya ha sido elegido para esa fila;

Pero para empezar, no estoy siendo capaz de obtener los valores que se establecen cuando la elección de los comboboxes, ni soy capaz de conseguir thosevales!

Heres es mi código hasta el momento.

La creación de la combobox:

public class SimGui extends JFrame {
                          //implements ActionListener {
    String Stations[] = new String[] {"Station 1","Station 2","Station 3","Station 4","Station 5","None"};
    JComboBox stationscombo = new JComboBox(Stations);
    Object obj = stationscombo.getSelectedItem();

Evento de Clic de ratón sobre la mesa:

private void jTable2MouseClicked(java.awt.event.MouseEvent evt) {                                     
    //Object event = evt.getSource();
    obj = stationscombo.getSelectedItem();
    System.out.println("Item: " + obj);
    //ListSelectionModel selectionModel = jTable2.getSelectionModel();
    int tb1columns = jTable2.getColumnCount();
    int selectionrow= jTable2.getSelectedRow();
    int selectioncolumn = jTable2.getSelectedColumn();
    if (selectioncolumn > 1) {
        for (int i=2;i<tb1columns;i++) {
            System.out.println(jTable2.getValueAt(selectionrow,selectioncolumn));
            /*if (jTable2.getValueAt(selectionrow, i) != "None") {
                stationscombo.removeItem(jTable2.getValueAt(selectionrow, i));
            }*/
        }
    }
    else { System.out.println(jTable2.getValueAt(selectionrow,selectioncolumn)); }
}

La construcción de la mesa:

jTable2.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null, null, null, null},
{null, null, null, null, null, null, null},
{null, null, null, null, null, null, null}
},
new String [] {
"Job Type", "Parts", "Station 1", "Station 2", "Station 3", "Station 4", "Station 5"
}
) {
Class[] types = new Class [] {
java.lang.Integer.class, java.lang.Integer.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class
};
boolean[] canEdit = new boolean [] {
false, true, true, true, true, true, true
};
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
jTable2.getTableHeader().setReorderingAllowed(false);
for (int x = 2;x<7;x++) {
jTable2.getColumnModel().getColumn(x).setCellEditor(new DefaultCellEditor(stationscombo));
}
jTable2.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jTable2MouseClicked(evt);
}
});

He miró a su alrededor y trató de implementar un detector para el combobox, pero fracasó. Si puedo implementar ActionListener en la clase, se mostrará un mensaje de advertencia diciendo que:

SimGui is not abstract and does not override abstract method actionPerformed(java.awt.event.ActionEvent) in java.awt.event.ActionListener

He alreay un ActionListener implementado para las tablas que se está trabajando, pero no sé si eso podría estar interfiriendo?

Action action = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(e.getSource());
//TableCellListener tcl = (TableCellListener)e.getSource();
//JComboBox cb = (JComboBox)e.getSource();
//String newSelection = (String)cb.getSelectedItem();
/*JComboBox cb = (JComboBox)e.getSource();
String teste = (String)cb.getSelectedItem();
System.out.println("Item: " + teste);*/
//TableCellListener tcl1 = new TableCellListener(jTable1, action);
/*if (tcl.getColumn() == 3) {
if (tcl.getNewValue() == true) {
int x = tcl.getColumn();
table1model.setColumnEditable(x, true);
}
else { 
table1model.setColumnEditable(tcl.getColumn(), false);
}
/*boolean canEdit[] = {
false, true, true, true, true, true
};
//System.out.println(isCellEditable(tcl1.getRow(),tcl1.getColumn()));
}*/
/*System.out.println(newSelection);
System.out.println("Row   : " + tcl.getRow());
System.out.println("Column: " + tcl.getColumn());
System.out.println("Old   : " + tcl.getOldValue());
System.out.println("New   : " + tcl.getNewValue());*/
}
};

Pero la línea de fondo, mi pregunta es, ¿cómo puedo trabajar correctamente con el combobox dentro de la tabla para que yo pueda obtener el conjunto de valores y obtener el valor de elemento cuando se selecciona?

  • Para una mejor ayuda antes, publicar un SSCCE.

1 Comentario

Dejar respuesta

Please enter your comment!
Please enter your name here