【问题标题】:How to change font of JComboBox如何更改 JComboBox 的字体
【发布时间】:2019-07-11 11:45:22
【问题描述】:

我想更改我的 JComboBox 的字体大小。 但是只有未选择的项目会发生变化,就像这样:

https://imgur.com/a/WnnyPA6

所以我希望所选项目也是粗体。

我做了一个这样的自定义组合框类:

public class CustomComboBox extends JLabel implements ListCellRenderer {
    public Component getListCellRendererComponent(
            JList list, 
            Object value, 
            int index, 
            boolean isSelected, 
            boolean cellHasFocus) {

        JLabel label = new JLabel(){
            public Dimension getPreferredSize(){
                return new Dimension(200, 80);
            }       
        };
        label.setText(String.valueOf(value));
        label.setFont(new Font("Serif", Font.BOLD, 30));

        return label;
    }
}

【问题讨论】:

  • “所以我希望选中的项目也是粗体的。” 那么..在那个代码中,它在哪里使用isSelected的值来做不同的事情?我们期望在这个问答网站上回答一定的最低标准,它超过了上面看到的。一般提示:为了尽快获得更好的帮助,edit 添加minimal reproducible exampleShort, Self Contained, Correct Example。替换数据库的硬编码数据。
  • 不是您问题的答案,但是您的渲染器已经是 JLabel。不要创建新的 JLabel。这违背了使用渲染器的目的。使用渲染器的重点是每个单元可以共享相同的组件,因此在使用资源方面非常有效。每次需要渲染单元格时,您的代码都会创建一个新的 JLabel,这会浪费资源。

标签: java swing jcombobox


【解决方案1】:

您可以简单地设置组合框的字体。像这样的:

import java.awt.Dimension;
import java.awt.Font;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.plaf.basic.BasicComboBoxRenderer;

/**
 * <code>ComboTest</code>.
 */
public class ComboTest {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new ComboTest()::startUp);
    }

    private void startUp() {
        JComboBox<String> combo = new JComboBox<>(new String[] {"A", "B", "C"});
        combo.setFont(new Font("Serif", Font.BOLD, 30));
        combo.setRenderer(new ComboRenderer());
        JFrame frm = new JFrame("Combo test");
        frm.add(combo);
        frm.pack();
        frm.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        frm.setLocationRelativeTo(null);
        frm.setVisible(true);
    }

    private static class ComboRenderer extends BasicComboBoxRenderer {

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(200, 80);
        }
    }
}

如果我的建议对您的情况没有帮助,请创建一个小的可运行示例,以便我们也可以启动和调试它。

【讨论】:

    【解决方案2】:

    您可以使用设置组合框的字体 combo.setFont(new FontUIResource("Roboto",Font.PLAIN,12);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-17
      • 2010-11-04
      • 2023-03-09
      • 1970-01-01
      • 2019-12-01
      • 2016-07-10
      • 2017-09-02
      • 1970-01-01
      相关资源
      最近更新 更多