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)
但是,当关闭该框时,这不会影响所选值.有任何想法吗?
我看不出有什么问题,问题一定出在你的代码的其余部分
渲染器仅应用于弹出窗口(如果可见)中的项目,
您可以使用基本和最简单的渲染器
您可以覆盖 p\xc3\xbaaramaters 中的所有参数 - JList 列表、对象值、\n int 索引、布尔值 isSelected、布尔值 cellHasFocus,每个参数均可设置、可测试...、单独
。
\n\nprivate 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\n\n我想知道如何更改 JComboBox 中显示/选定值的字体
\n
。
\n\n。
\n\n。
\n\n。
\n\nimport 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