JTable & ComboBox

1 resposta
B

É o seguinte pessoal :

Eu Criei um JTable , e defini que uma das colunas iria ser editada atravéz de um ComboBox, mas agora eu preciso os ItemIndex dos comboboxes de cada linha , como eu faço isso … se em cada linha ele pode ter selecionado um item diferente e o combobox associado é sempre o mesmo…

Até Mais

1 Resposta

F

da uma olhada neste codigo abaixo… ele esta meio bagunçado… mas tu ja pode
ter uma ideia de como fazer o q tu quer

package table.combo;

import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.EventObject;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.event.CellEditorListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;

/**
 * @author fabiofalci
 */
public class ComboTable {
    public static void main(String args[]) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new ComboTable();
            }
        });
    }

    public ComboTable() {
        MyModel model = new MyModel();
        JTable table = new JTable(model);
        table.setDefaultRenderer(JComboBox.class, new ComboRenderer());
        table.setDefaultEditor(JComboBox.class, new ComboEditor());
        JScrollPane scroller = new JScrollPane(table);
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.getContentPane().add(scroller);
        f.setSize(500, 500);
        f.setVisible(true);
    }
}

class ComboRenderer implements TableCellRenderer {
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        return (JComboBox) value;
    }
}

class ComboEditor implements TableCellEditor {
    private java.util.Vector listeners = new java.util.Vector();

    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
        table.setRowSelectionInterval(row, row);
        table.setColumnSelectionInterval(column, column);
        return (JComboBox) value;
    }

    public boolean shouldSelectCell(EventObject o) {
        return true;
    }

    public void removeCellEditorListener(CellEditorListener l) {
        listeners.remove(l);
    }

    public void addCellEditorListener(CellEditorListener l) {
        listeners.add(l);
    }

    public void cancelCellEditing() {
    }

    public Object getCellEditorValue() {
        return null;
    }

    public boolean isCellEditable(EventObject o) {
        return true;
    }

    public boolean stopCellEditing() {
        return true;
    }
}

class MyModel extends AbstractTableModel implements ActionListener {
    String[] headers = { "Nome", "SobreNome", "!!!", "Combo" };

    Class[] columnTypes = { String.class, String.class, JComboBox.class, JComboBox.class };

    Object[] items1 = {"A", "B", "C"};
    JComboBox show1 = new JComboBox(items1);

    Object[] items2 = {"D", "E", "F"};
    JComboBox show2 = new JComboBox(items2);

    Object[] items3 = {"G", "H", "I"};
    JComboBox show3 = new JComboBox(items3);

    Object[] items4 = {"J", "K", "L"};
    JComboBox show4 = new JComboBox(items4);

    
    Object[][] data = { { "Pedro", "Joao", show1, show3 }, { "Mario", "Conhece", show2, show4 } };

    public MyModel() {
        show1.addActionListener(this);
        show2.addActionListener(this);
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == show1) {
            System.out.println("show1");
        } else if (e.getSource() == show2) {
            System.out.println("show2");
        }
    }

    public int getRowCount() {
        return data.length;
    }

    public int getColumnCount() {
        return headers.length;
    }

    public Class getColumnClass(int col) {
        return columnTypes[col];
    }

    public String getColumnName(int col) {
        return headers[col];
    }

    public boolean isCellEditable(int row, int col) {
        return true;
    }

    public Object getValueAt(int row, int col) {
        return data[row][col];
    }
Criado 31 de maio de 2005
Ultima resposta 31 de mai. de 2005
Respostas 1
Participantes 2