Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Jbutton in Jtable

  1. #1

    Jbutton in Jtable

    Ciao a tutti. Nella mia applicazione devo inserire un jbutton all'interno di una cella di una jtable! Per farlo ho ridefinito il rendere e l'editor quasi come questo esempio:

    codice:
    // Example from http://www.crionics.com/products/ope...gExamples.html
    
    import java.awt.Component;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    
    import javax.swing.DefaultCellEditor;
    import javax.swing.JButton;
    import javax.swing.JCheckBox;
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.UIManager;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.TableCellRenderer;
    
    /**
     * @version 1.0 11/09/98
     */
    public class JButtonTableExample extends JFrame {
    
      public JButtonTableExample() {
        super("JButtonTable Example");
    
        DefaultTableModel dm = new DefaultTableModel();
        dm.setDataVector(new Object[][] { { "button 1", "foo" },
            { "button 2", "bar" } }, new Object[] { "Button", "String" });
    
        JTable table = new JTable(dm);
        table.getColumn("Button").setCellRenderer(new ButtonRenderer());
        table.getColumn("Button").setCellEditor(
            new ButtonEditor(new JCheckBox()));
        JScrollPane scroll = new JScrollPane(table);
        getContentPane().add(scroll);
        setSize(400, 100);
        setVisible(true);
      }
    
      public static void main(String[] args) {
      
       
        JButtonTableExample frame = new JButtonTableExample();
        frame.addWindowListener(new WindowAdapter() {
          public void windowClosing(WindowEvent e) {
            System.exit(0);
          }
        });
      }
    }
    /**
     * @version 1.0 11/09/98
     */
    
    class ButtonRenderer extends JButton implements TableCellRenderer {
    
      public ButtonRenderer() {
        setOpaque(true);
      }
    
      public Component getTableCellRendererComponent(JTable table, Object value,
          boolean isSelected, boolean hasFocus, int row, int column) {
        if (isSelected) {
          setForeground(table.getSelectionForeground());
          setBackground(table.getSelectionBackground());
        } else {
          setForeground(table.getForeground());
          setBackground(UIManager.getColor("Button.background"));
        }
      if (value)
    {
    setEnable(true);
    }else {
    setEnable(false);
    }
        setText((value == null) ? "" : value.toString());
        return this;
      }
    }
    
    /**
     * @version 1.0 11/09/98
     */
    
    class ButtonEditor extends DefaultCellEditor {
      protected JButton button;
    
      private String label;
    
      private boolean isPushed;
    
      public ButtonEditor(JCheckBox checkBox) {
        super(checkBox);
        button = new JButton();
        button.setOpaque(true);
        button.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            fireEditingStopped();
          }
        });
      }
    
      public Component getTableCellEditorComponent(JTable table, Object value,
          boolean isSelected, int row, int column) {
        if (isSelected) {
          button.setForeground(table.getSelectionForeground());
          button.setBackground(table.getSelectionBackground());
        } else {
          button.setForeground(table.getForeground());
          button.setBackground(table.getBackground());
        }
        label = (value == null) ? "" : value.toString();
        if (value)
    {
    setEnable(true);
    }else {
    setEnable(false);
    }
        button.setText(label);
        isPushed = true;
        return button;
      }
    
      public Object getCellEditorValue() {
        if (isPushed) {
          // 
          // 
          JOptionPane.showMessageDialog(button, label + ": Ouch!");
          // System.out.println(label + ": Ouch!");
        }
        isPushed = false;
        return new String(label);
      }
    
      public boolean stopCellEditing() {
        isPushed = false;
        return super.stopCellEditing();
      }
    
      protected void fireEditingStopped() {
        super.fireEditingStopped();
      }
    }
    Il mio problema e che non tutte le righe hanno il button abilitato. Quindi il rendere lo riesco a definire tranquillamente... il problema e' l'editor che non ne vuole di funzionare!!!!!

  2. #2
    Problema risolto...... non puntavo al button nell'editor.... ! Valga come esempio per chi ne ha bisogno!!!

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Guarda anche il mio esempio di uso di JButton nelle celle di JTable: dal mio sito -> Java Examples -> sezione Tables, è il primo esempio.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.