Oppure

Loading
05/04/16 15:38
domenico_rizzo
Il mio problema è il seguente, vorrei che il contenuto della cella possa automaticamente riadattare l'altezza della stessa. Come potrei risolvere?
Questo è il mio codice:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Font;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;

/**
 *
 * @author 
 */
public class ListaGare extends JPanel{
    public static DefaultTableModel tableModel;

    @SuppressWarnings("OverridableMethodCallInConstructor")
    public ListaGare() {
        setLayout( new BorderLayout() );        
        String[] columnNames = new String[] {"Campo 1", "Campo 2", "Campo 3", "Campo 4", "Campo 5", "Campo 6"};
        JTable table = new JTable();
        table.setAutoCreateRowSorter(true);
        table.getTableHeader().setDefaultRenderer( new SimpleHeaderRenderer() );
        table.getTableHeader().setCursor(new Cursor(Cursor.HAND_CURSOR));
        table.getTableHeader().setReorderingAllowed(false);
        table.getTableHeader().setResizingAllowed(false);
        table.setRowSelectionAllowed(false);
        tableModel = new DefaultTableModel(columnNames, 0) {
            @Override
            public boolean isCellEditable(int row, int column) {
               return false;
            }      
            @Override
            public Class getColumnClass(int columnIndex) {
                return String.class;
            }
        };
        table.setModel(tableModel);
        //table.setRowHeight(table.getRowHeight() * 2);
        table.setDefaultRenderer(String.class, new MultiLineCellRenderer());
        add(new JScrollPane(table), BorderLayout.CENTER);
        JButton back = new JButton("Torna indietro");
        back.setFont(new Font(Font.DIALOG, Font.PLAIN, 35));
        add(back, BorderLayout.SOUTH);
    }
    
    public class SimpleHeaderRenderer extends JLabel implements TableCellRenderer {
        @SuppressWarnings("OverridableMethodCallInConstructor")
        public SimpleHeaderRenderer() {
            setFont(new Font("Consolas", Font.BOLD, 14));
            setForeground(Color.BLUE);
            setBorder(BorderFactory.createEtchedBorder());
        }
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            setText(value.toString());
            return this;
        }
    }
    class MultiLineCellRenderer extends JTextArea implements TableCellRenderer {
        @SuppressWarnings("OverridableMethodCallInConstructor")
        public MultiLineCellRenderer() {
            setLineWrap(true);
            setWrapStyleWord(true);
            setOpaque(true);
        }
        @Override
        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(table.getBackground());
            }
            setFont(table.getFont());
            if (hasFocus) {
                setBorder(UIManager.getBorder("Table.focusCellHighlightBorder"));
                if (table.isCellEditable(row, column)) {
                    setForeground(UIManager.getColor("Table.focusCellForeground"));
                    setBackground(UIManager.getColor("Table.focusCellBackground"));
                }
            } else {
                setBorder(new EmptyBorder(1, 2, 1, 2));
            }
            setText((value == null) ? "" : value.toString());
            return this;
        }
    }
}

Ultima modifica effettuata da domenico_rizzo 05/04/16 15:40
aaa
05/04/16 16:41
domenico_rizzo
Postato originariamente da domenico_rizzo:

Il mio problema è il seguente, vorrei che il contenuto della cella possa automaticamente riadattare l'altezza della stessa. Come potrei risolvere?
Questo è il mio codice:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Font;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;

/**
 *
 * @author 
 */
public class ListaGare extends JPanel{
    public static DefaultTableModel tableModel;

    @SuppressWarnings("OverridableMethodCallInConstructor")
    public ListaGare() {
        setLayout( new BorderLayout() );        
        String[] columnNames = new String[] {"Campo 1", "Campo 2", "Campo 3", "Campo 4", "Campo 5", "Campo 6"};
        JTable table = new JTable();
        table.setAutoCreateRowSorter(true);
        table.getTableHeader().setDefaultRenderer( new SimpleHeaderRenderer() );
        table.getTableHeader().setCursor(new Cursor(Cursor.HAND_CURSOR));
        table.getTableHeader().setReorderingAllowed(false);
        table.getTableHeader().setResizingAllowed(false);
        table.setRowSelectionAllowed(false);
        tableModel = new DefaultTableModel(columnNames, 0) {
            @Override
            public boolean isCellEditable(int row, int column) {
               return false;
            }      
            @Override
            public Class getColumnClass(int columnIndex) {
                return String.class;
            }
        };
        table.setModel(tableModel);
        //table.setRowHeight(table.getRowHeight() * 2);
        table.setDefaultRenderer(String.class, new MultiLineCellRenderer());
        add(new JScrollPane(table), BorderLayout.CENTER);
        JButton back = new JButton("Torna indietro");
        back.setFont(new Font(Font.DIALOG, Font.PLAIN, 35));
        add(back, BorderLayout.SOUTH);
    }
    
    public class SimpleHeaderRenderer extends JLabel implements TableCellRenderer {
        @SuppressWarnings("OverridableMethodCallInConstructor")
        public SimpleHeaderRenderer() {
            setFont(new Font("Consolas", Font.BOLD, 14));
            setForeground(Color.BLUE);
            setBorder(BorderFactory.createEtchedBorder());
        }
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            setText(value.toString());
            return this;
        }
    }
    class MultiLineCellRenderer extends JTextArea implements TableCellRenderer {
        @SuppressWarnings("OverridableMethodCallInConstructor")
        public MultiLineCellRenderer() {
            setLineWrap(true);
            setWrapStyleWord(true);
            setOpaque(true);
        }
        @Override
        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(table.getBackground());
            }
            setFont(table.getFont());
            if (hasFocus) {
                setBorder(UIManager.getBorder("Table.focusCellHighlightBorder"));
                if (table.isCellEditable(row, column)) {
                    setForeground(UIManager.getColor("Table.focusCellForeground"));
                    setBackground(UIManager.getColor("Table.focusCellBackground"));
                }
            } else {
                setBorder(new EmptyBorder(1, 2, 1, 2));
            }
            setText((value == null) ? "" : value.toString());
            return this;
        }
    }
}



Risolto usando il metodo: table.setRowHeight(numeroRiga, altezzaRiga);
aaa