Visualizzazione dei risultati da 1 a 4 su 4

Discussione: JButton dentro JTable

  1. #1

    JButton dentro JTable

    Ciao ragazzi,

    ho un problema , devo inserire un JButton dentro una JTable, è possibile farlo? :master:
    In pratica ho dei dati che mi ritornano dal DB, popolo la tabella e nell'ultima colonna devo mettere un pulsante che mi attiva una JFrame che mi faccia vedere i dati di un'altra tabella associati a quella tupla. Non mi vanno bene soluzioni scorciatoia del tipo 2click sulla riga perchè potrei avere + pulsanti che mi attivano diverse tabelle.

    Grazie in anticipo e spero di essere stato chiaro.
    /*no comment*/

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: JButton dentro JTable

    Originariamente inviato da fgiovanni
    devo inserire un JButton dentro una JTable, è possibile farlo?
    Sì, devi documentarti sui "renderer" e gli "editor".

    http://java.sun.com/docs/books/tutor...tml#editrender
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3

    Re: Re: JButton dentro JTable

    Originariamente inviato da andbin
    Sì, devi documentarti sui "renderer" e gli "editor".

    http://java.sun.com/docs/books/tutor...tml#editrender
    gli avevo dato già una letta ma non mi è stato molto chiaro! se tu hai capito potresti spiegarmi meglio?
    /*no comment*/

  4. #4
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    io uso una classe apposta che identifica il bottone..

    codice:
    import java.awt.Color;
    import java.awt.Component;
    import java.awt.Dimension;
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    import javax.swing.AbstractCellEditor;
    import javax.swing.BorderFactory;
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JPanel;
    import javax.swing.JTable;
    import javax.swing.table.TableCellEditor;
    import javax.swing.table.TableCellRenderer;
    import javax.swing.table.TableColumnModel;
    
    
    public class ButtomColumn extends AbstractCellEditor implements TableCellRenderer, TableCellEditor, ActionListener, Globals{
    
    	JTable table;
    	JButton renderButton;
    	JButton editButton;
    	String text;
    	
    	public ButtomColumn(JTable table, int column){
    		super();
    		this.table = table;
    		renderButton = getJButton();
    		editButton = getJButton();
    		editButton.setFocusPainted( false );
    		editButton.addActionListener( this );
    
    		TableColumnModel columnModel = table.getColumnModel();
    		columnModel.getColumn(column).setCellRenderer( this );
    		columnModel.getColumn(column).setCellEditor( this );
    		
    	}
    	
    	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column){
          
           if(value == null){
        	   renderButton.setText("");
           }else{
        	   renderButton.setText(value.toString());
           }
           
           // il metodo restituisce un panel per evitare il ridimensionamento del jButton
           JPanel jPanel = new JPanel();
           jPanel.setBackground(table.getBackground());
           jPanel.setLayout(new GridBagLayout());
           jPanel.add(renderButton, new GridBagConstraints());
           jPanel.add(renderButton);
           
           return jPanel;
       }
    
       public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column){
    	   if(value==null){
    		   text = "";
    	   }else{
    		   text = value.toString();
    	   }
           editButton.setText( text );
           return editButton;
       }
    
       public Object getCellEditorValue(){
           return text;
       }
    
       public void actionPerformed(ActionEvent e){
           fireEditingStopped();
           System.out.println( e.getActionCommand() + " : " + table.getSelectedRow());
       }
       
       private javax.swing.JButton getJButton() {
    		JButton jButton = new JButton();
    		jButton.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
    		jButton.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
    		jButton.setPreferredSize(new Dimension(30, 28));
    		jButton.setFont(new java.awt.Font("Dialog", java.awt.Font.BOLD, 12));
    		jButton.setIcon(new ImageIcon(getClass().getResource(Globals.IMG_CONSOLE_APRI_PDF)));
    		return jButton;
    	}
    
       
    }

    e alla table specifico che la colonna n appartiene alla classe appena riportata :

    codice:
    	public javax.swing.JTable getJTable() {
    
    		// PREPARO INTESTAZIONI TABELLA
    		String[] columnNames = {"Sel", "Prog", "Num. Ordine", "Data Ordine", "Nome File", "Stato", "Cod Cliente",  "Descr Cliente", "", "Pdf"};
    		model = new PersonalTableModel(lista, columnNames);
    	    table = new JTable(model);
    	    table.getTableHeader().setReorderingAllowed( false );
    	    table.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    	    table.setPreferredScrollableViewportSize(new Dimension(780,326));
    
    	    
            // colonne personalizzate
    		new ImageColumn(table,8);
    	    new ButtomColum(table,9);
    		
    	    // colonne nascoste
    		table.removeColumn(table.getColumnModel().getColumn(4));
    		table.removeColumn(table.getColumnModel().getColumn(4));
    		table.removeColumn(table.getColumnModel().getColumn(4));
    
    		// colonne ridimensionate
    		table.setRowHeight(30);
    		table.getColumn("Sel").setPreferredWidth(35);
    		table.getColumn("Prog").setPreferredWidth(65);
    		table.getColumn("Num. Ordine").setPreferredWidth(140);
    		table.getColumn("Data Ordine").setPreferredWidth(120);
    		table.getColumn("Descr Cliente").setPreferredWidth(380);
    		table.getColumn("Pdf").setPreferredWidth(60);
    		table.getColumn("").setPreferredWidth(35);
    		
    	return table;
    	}
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

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.