首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JTableHeader字体不变

JTableHeader字体不变
EN

Stack Overflow用户
提问于 2022-11-13 20:08:51
回答 1查看 25关注 0票数 -1

我正在尝试更改我的JTable中标题的字体,但是setFont方法没有工作。我试着在渲染器上使用setFont,但没有成功。我试过使用UIDefaults,但也不起作用。我试着在setFont对象上调用JTableHeader,但这也不起作用。

这是代码的结果。

代码语言:javascript
复制
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);
            }
        };
EN

回答 1

Stack Overflow用户

发布于 2022-11-13 20:24:29

对我来说很好。

从基本代码开始,然后每次进行一次更改,查看它何时停止工作:

代码语言:javascript
复制
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() );
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74424374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档