codice:
class FrameTabellaFile3 implements TableCellRenderer {
private TableCellRenderer defaultRenderer;
public FrameTabellaFile3(TableCellRenderer renderer) {
defaultRenderer = renderer;
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected,
boolean hasFocus,
int row, int column)
{
if(value instanceof Component)
return (Component)value;
return defaultRenderer.getTableCellRendererComponent(
table, value, isSelected, hasFocus, row, column);
}
}
class JTableButtonModel extends AbstractTableModel {
private Object[][] rows = {
{ "One", "One",new JButton("Button One") },
{ "Two", "One",new JButton("Button Two") },
{ "Three","One", new JButton("Button Three") },
{ "Four","One", new JButton("Button Four") }
};
private String[] columns = { "Numbers", "Buttons","PROVA" };
public String getColumnName(int column) {
return columns[column];
}
public int getRowCount() {
return rows.length;
}
public int getColumnCount() {
return columns.length;
}
public Object getValueAt(int row, int column) {
return rows[row][column];
}
public boolean isCellEditable(int row, int column) {
return false;
}
public Class getColumnClass(int column) {
return getValueAt(0, column).getClass();
}
}
class JTableButtonMouseListener implements MouseListener {
private JTable tableListener;
private JDialog dialog;
private JFrame frm;
private JTextField txtCol0;
private JTextField txtCol1;
private JButton btn_Salva;
public void clickOpenDialog(MouseEvent e) {
MouseEvent buttonEvent;
tableListener.getColumnName(0);
frm = new JFrame();
JLabel lblCol0 = new JLabel();
JLabel lblCol1 = new JLabel();
lblCol0.setSize(50,50);
lblCol1.setSize(50,50);
txtCol0 = new JTextField();
txtCol1 = new JTextField();
btn_Salva = new JButton();
btn_Salva.setText("SALVA");
btn_Salva.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
btn_Salva_actionPerformed(e);
}
});
txtCol0.setSize(100,20);
txtCol1.setSize(100,20);
txtCol0.setText(tableListener.getValueAt(tableListener.getSelectedRow(),0).toString());
txtCol1.setText(tableListener.getValueAt(tableListener.getSelectedRow(),1).toString());
txtCol0.setSize(100,20);
txtCol1.setSize(100,20);
JPanel pan = new JPanel();
GridLayout layout = new GridLayout(3,2);
lblCol0.setText(tableListener.getColumnName(0));
lblCol1.setText(tableListener.getColumnName(1));
btn_Salva.setSize(100,20);
pan.add(lblCol0);
pan.add(txtCol0);
pan.add(lblCol1);
pan.add(txtCol1);
pan.add(btn_Salva);
pan.setLayout(layout);
frm.getContentPane().add(pan);
frm.pack();
frm.setVisible(true);
}
private void btn_Salva_actionPerformed(ActionEvent e)
{
int nRow = tableListener.getSelectedRow();
tableListener.setValueAt(txtCol0.getText(),nRow,0);
tableListener.setValueAt(txtCol1.getText(),nRow,1);
tableListener.repaint();
System.out.println(tableListener.getValueAt(tableListener.getSelectedRow(),0).toString());
frm.dispose();
}
public JTableButtonMouseListener(JTable table) {
tableListener = table;
}
public void mouseClicked(MouseEvent e) {
//solo la colonna del bottone aziona il dialog.DA MIGLIORARE!!
if(tableListener.getSelectedColumn()==2)
clickOpenDialog(e);
}
public void mousePressed(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
}
final class JTableButton extends JFrame {
private JTable table;
private JScrollPane scrollPane;
public JTableButton() {
super("JTableButton Demo");
TableCellRenderer defaultRenderer;
table = new JTable(new JTableButtonModel());
defaultRenderer = table.getDefaultRenderer(JButton.class);
table.setDefaultRenderer(JButton.class,
new FrameTabellaFile3(defaultRenderer));
table.setPreferredScrollableViewportSize(new Dimension(400, 200));
table.addMouseListener(new JTableButtonMouseListener( table));
table.setValueAt("pippo",0,0);
scrollPane = new JScrollPane( table);
setContentPane( scrollPane);
}
public static void main(String[] args) {
JFrame frame;
WindowListener exitListener;
exitListener = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
Window window = e.getWindow();
window.setVisible(false);
window.dispose();
System.exit(0);
}
};
frame = new JTableButton();
frame.addWindowListener(exitListener);
frame.pack();
frame.setVisible(true);
}
}