JComboBox的自定义字体

Gra*_*ins 5 java fonts swing jcombobox

我想知道如何更改a中显示/选定值的字体JComboBox.例如

上层渲染Aharoni(图片由此答案提供).

我可以使用这样的渲染器更改列表值:

public class JComboBoxItalic extends BasicComboBoxRenderer {
    protected DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer();

    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
        Font theFont = null;
        JLabel renderer = (JLabel) defaultRenderer.getListCellRendererComponent(list, value, index, isSelected,cellHasFocus);
        theFont = new Font("Courier", Font.ITALIC, 14);
        renderer.setFont(theFont);
        return renderer;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当关闭该框时,这不会影响所选值.有任何想法吗?

mKo*_*bel 4

    \n
  • 我看不出有什么问题,问题一定出在你的代码的其余部分

  • \n
  • 渲染器仅应用于弹出窗口(如果可见)中的项目,

  • \n
  • 您可以使用基本和最简单的渲染器

  • \n
  • 您可以覆盖 p\xc3\xbaaramaters 中的所有参数 - JList 列表、对象值、\n int 索引、布尔值 isSelected、布尔值 cellHasFocus,每个参数均可设置、可测试...、单独

  • \n
\n\n

\n\n
private class ComboBoxRenderer extends DefaultListCellRenderer {\n\n    private static final long serialVersionUID = 1L;\n    private Font baseFont = new JLabel("Test").getFont();\n\n    @Override\n    public Component getListCellRendererComponent(JList list, Object value,\n            int index, boolean isSelected, boolean cellHasFocus) {\n\n        super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);\n        //if (value instanceof Font) {\n        //    Font font = (Font) value;\n        //    setFont(new Font(font.getName(), baseFont.getStyle(), baseFont.getSize()));\n              setFont(new Font("Courier", Font.ITALIC, 14));\n        //}\n        return this;\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

编辑

\n\n
\n

我想知道如何更改 JComboBox 中显示/选定值的字体

\n
\n\n

\n\n

在此输入图像描述

\n\n

\n\n

在此输入图像描述

\n\n

\n\n

在此输入图像描述

\n\n

\n\n
import java.awt.BorderLayout;\nimport java.awt.Component;\nimport java.awt.Dimension;\nimport java.awt.Font;\nimport java.awt.GraphicsEnvironment;\nimport java.awt.Point;\nimport java.awt.Rectangle;\nimport java.awt.event.ItemEvent;\nimport java.awt.event.ItemListener;\nimport javax.swing.DefaultListCellRenderer;\nimport javax.swing.JComboBox;\nimport javax.swing.JFrame;\nimport javax.swing.JLabel;\nimport javax.swing.JList;\nimport javax.swing.JPopupMenu;\nimport javax.swing.JScrollPane;\nimport javax.swing.JViewport;\nimport javax.swing.plaf.basic.BasicComboBoxRenderer;\n\npublic class SystemFontDisplayer extends JFrame {\n\n    private static final long serialVersionUID = 1L;\n    private JComboBox fontsBox;\n\n    public SystemFontDisplayer() {\n\n        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();\n        String[] fontFamilyNames = ge.getAvailableFontFamilyNames();\n        fontsBox = new JComboBox(fontFamilyNames);\n        fontsBox.setSelectedItem(0);\n        fontsBox.setRenderer(new ComboRenderer(fontsBox));\n        fontsBox.addItemListener(new ItemListener() {\n\n            @Override\n            public void itemStateChanged(ItemEvent e) {\n                if (e.getStateChange() == ItemEvent.SELECTED) {\n                    final String fontName = fontsBox.getSelectedItem().toString();\n                    fontsBox.setFont(new Font(fontName, Font.PLAIN, 16));\n                }\n            }\n        });\n        fontsBox.setSelectedItem(0);\n        fontsBox.getEditor().selectAll();\n        add(fontsBox, BorderLayout.CENTER);\n        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);\n        setPreferredSize(new Dimension(400, 60));\n        setLocation(200, 105);\n        pack();\n\n        java.awt.EventQueue.invokeLater(new Runnable() {\n\n            @Override\n            public void run() {\n                fontsBox.setPopupVisible(true);\n                fontsBox.setPopupVisible(false);\n            }\n        });\n        setVisible(true);\n    }\n\n    public static void main(String arg[]) {\n        java.awt.EventQueue.invokeLater(new Runnable() {\n\n            @Override\n            public void run() {\n                SystemFontDisplayer systemFontDisplayer = new SystemFontDisplayer();\n            }\n        });\n    }\n\n    private class ComboRenderer extends BasicComboBoxRenderer {\n\n        private static final long serialVersionUID = 1L;\n        private JComboBox comboBox;\n        final DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer();\n        private int row;\n\n        private ComboRenderer(JComboBox fontsBox) {\n            comboBox = fontsBox;\n        }\n\n        private void manItemInCombo() {\n            if (comboBox.getItemCount() > 0) {\n                final Object comp = comboBox.getUI().getAccessibleChild(comboBox, 0);\n                if ((comp instanceof JPopupMenu)) {\n                    final JList list = new JList(comboBox.getModel());\n                    final JPopupMenu popup = (JPopupMenu) comp;\n                    final JScrollPane scrollPane = (JScrollPane) popup.getComponent(0);\n                    final JViewport viewport = scrollPane.getViewport();\n                    final Rectangle rect = popup.getVisibleRect();\n                    final Point pt = viewport.getViewPosition();\n                    row = list.locationToIndex(pt);\n                }\n            }\n        }\n\n        @Override\n        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {\n            super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);\n            if (list.getModel().getSize() > 0) {\n                manItemInCombo();\n            }\n            final JLabel renderer = (JLabel) defaultRenderer.getListCellRendererComponent(list, value, row, isSelected, cellHasFocus);\n            final Object fntObj = value;\n            final String fontFamilyName = (String) fntObj;\n            setFont(new Font(fontFamilyName, Font.PLAIN, 16));\n            return this;\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n