-1

I'm trying to change the font of the headers in my JTable but the setFont method isn't working. I tried using the setFont on the renderer but that didn't work. I tried using UIDefaults but that didnt work either. I tried calling setFont on the JTableHeader object but that also didn't work.

This is the result of the code

headerModel.setColumnIdentifiers(headers);

        JTable prodTable = new JTable(headerModel) {
            @Override
            public boolean isCellEditable(int row, int column) {
                //all cells false
                return false;
            }
        };
        
        prodTable.setShowGrid(false);
        prodTable.setRowHeight(50);
        prodTable.setFillsViewportHeight(true);
        prodTable.setBorder(null);

        //UIDefaults defaults = UIManager.getLookAndFeelDefaults();
        //defaults.put("TableHeader.font", new Font("SansSerif",Font.BOLD,50));
        prodTable.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {// alternate background color for rows
            public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
                                                           boolean hasFocus, int row, int column) {
                Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
                if (!isSelected)
                    c.setBackground(row % 2 == 0 ? Color.decode("#E5EBF4") : Color.decode("#ECF3FA"));
                return c;
            };
        });

        final DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
        renderer.setBorder(null);
        renderer.setBackground(Color.decode("#ECF3FA"));
        renderer.setHorizontalAlignment(JLabel.CENTER);
        renderer.setForeground(Color.decode("#707070"));
        //renderer.setFont(new Font("SansSerif",Font.BOLD,50));
        renderer.setPreferredSize(new Dimension(100,50));


        JTableHeader jTableHeader = prodTable.getTableHeader();
        jTableHeader.setFont(new Font("SansSerif",Font.BOLD,50));
        jTableHeader.setDefaultRenderer(renderer);


        final TableRowSorter<DefaultTableModel> sorter = new TableRowSorter<DefaultTableModel>(headerModel);
        prodTable.setRowSorter(sorter);
        
        JScrollPane tableScroll = new JScrollPane(prodTable){
            @Override
            public Dimension getPreferredSize() {
                return new Dimension(100, 100);
            }
        };
Ashley
  • 1
  • 3
  • 1
    Post a proper [mre] based off the code provide below when you isolate the change you made to cause the problem. – camickr Nov 13 '22 at 20:25

1 Answers1

1

Works fine for me.

Start with basic code and then make changes one at a time to see when it stops working:

import java.awt.*;
import javax.swing.*;

public class MRE
{
    private static void createAndShowGUI()
    {
        JTable table = new JTable(5, 10);
        Font f = new Font("SansSerif",Font.BOLD,50);
        table.getTableHeader().setFont(f);
        JScrollPane scrollPane = new JScrollPane( table );

        JFrame frame = new JFrame("SSCCE");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(scrollPane);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationByPlatform( true );
        frame.setVisible( true );
    }

    public static void main(String[] args) throws Exception
    {
        java.awt.EventQueue.invokeLater( () -> createAndShowGUI() );
    }
}
camickr
  • 321,443
  • 19
  • 166
  • 288