Botão em JTable

1 resposta
L

Pessoa, eu tem como colocar um botão em uma JTable??
Fiz ela com TableModel…tem como?
:?:

1 Resposta

F

olha esse exemplo:

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

import javax.swing.JButton;
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;

public class ButtonTable {
    public static void main(String args[]) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new ButtonTable();
            }
        });
    }

    public ButtonTable() {
        MyModel model = new MyModel();
        JTable table = new JTable(model);
        table.setDefaultRenderer(JButton.class, new ButtonRenderer());
        table.setDefaultEditor(JButton.class, new ButtonEditor());
        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 ButtonRenderer implements TableCellRenderer {
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        return (JButton) value;
    }
}

class ButtonEditor 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 (JButton) 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", "!!!" };

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

    JButton show1 = new JButton("show1");

    JButton show2 = new JButton("show2");

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

    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 21 de março de 2005
Ultima resposta 23 de mar. de 2005
Respostas 1
Participantes 2