无法使用JComboBox更改字体

时间:2014-07-29 13:58:37

标签: java

我试图通过使用JComboBox来更改我的JTextField的字体。问题是当我尝试运行该程序时,它工作正常,但现在当我尝试更改程序中的字体时,我得到了大量的错误。这是代码:

    JTextField myJTextField = new JTextField ("This text will be changed!", 20);
    myJTextField.setEditable(false);
    add(myJTextField);

    Font font = new Font ("Serif", Font.PLAIN, 14);
    Font font1 = new Font ("Serif", Font.BOLD, 14);
    Font font2 = new Font ("Serif", Font.ITALIC, 14);
    Font myFonts [] = {font ,font1, font2};
    myBox1 = new JComboBox (myFonts);

    myBox1.addItemListener (new ItemListener () {
        public void itemStateChanged (ItemEvent e) {
            Font myFonts [] = {font ,font1, font2};
            int array [] = {0,1,2};

            if (e.getStateChange() == ItemEvent.SELECTED)
                    myFonts [0] = new Font ("Serif", Font.PLAIN, 14);
            else if (e.getStateChange() == ItemEvent.SELECTED)
                    myFonts [1] = new Font ("Serif", Font.BOLD, 14);
            else if (e.getStateChange() == ItemEvent.SELECTED)
                    myFonts [2] = new Font ("Serif", Font.ITALIC, 14);

            myJTextField.setFont(myFonts[array.length]);
        }
    }); add(myBox1);

任何帮助都将非常感激。

2 个答案:

答案 0 :(得分:1)

如果我没有犯错,每一个条件都一样。 myFonts[array.length]将产生一个IndexOutOf Bounds。

myBox1.addItemListener (new ItemListener() {
    @Override
    public void itemStateChanged (ItemEvent e) {
        if (e.getStateChange() == ItemEvent.SELECTED) {
            Font font = (Font) e.getItem();
            myJTextField.setFont(font);
        }
    }
};

答案 1 :(得分:0)

您无法将Font个对象直接传递给JComboBox构造函数。请查看使用setRenderer()并创建您自己的Renderer类,如下例所示:

Getting fonts, sizes, bold,...etc