为什么这个字体不会改变大小?

时间:2016-03-25 20:25:31

标签: java fonts

我正在制作一个wordpad程序并试图创建一个JComboBox来改变字体大小。它运行/编译并显示我的选项,但是当我点击索引时,字体大小不会改变。这是修改字体大小的唯一方法,任何使其有效的建议吗?

 fontsize.addActionListener(
                    new ActionListener(){
                        public void actionPerformed(ActionEvent e)
                        {
                            if(fontsize.getSelectedIndex()==0)
                            {
                                txt.setFont(txt.getFont().deriveFont(10));
                                txt.setLineWrap(true);
                            }

                            else if(fontsize.getSelectedIndex()==1){
                                Font fontss = txt.getFont();
                                Font biggerFont = fontss.deriveFont(10);
                                txt.setFont(biggerFont);
                                txt.setLineWrap(true);
                        }
                            else if(fontsize.getSelectedIndex()==2){
                                Font fontss = txt.getFont();
                                Font biggerFont = fontss.deriveFont(10);
                                txt.setFont(biggerFont);
                                txt.setLineWrap(true);
                    }
                            else if(fontsize.getSelectedIndex()==3){
                                Font fontss = txt.getFont();
                                Font biggerFont = fontss.deriveFont(10);
                                txt.setFont(biggerFont);
                                txt.setLineWrap(true);
                    }
                            else{}
                        }
                    }
                    );

5 个答案:

答案 0 :(得分:1)

  

为什么这个字体不会改变大小?

因为你没有改变大小。

您可能希望查看Java API for Font并查看deriveFont(int)实际意味着什么。

您应该在deriveFont(int style)的参数列表中放置 字体样式 ,而不是 字体大小 即可。这就是无法更改字体大小的原因。

  

public Font deriFont(int style)

     

通过复制当前Font对象并对其应用新样式来创建新的Font对象。

     

参数:style - 新字体的样式

如果要更改当前字体的字体大小,可以执行以下操作:

Font currFont = txt.getFont();
int newSize = 20;
txt.setFont(new Font(currFont.getName(), currFont.getStyle(), newSize));

答案 1 :(得分:1)

使用以float作为参数的deriveFont方法,这个方法将创建一个具有相同参数但新大小的新Font。

Font biggerFont = fontss.deriveFont((float)10);    

答案 2 :(得分:0)

.eq(0)的参数始终是10.而不是像在这种情况下那样对数字进行硬编码,可能是复制和粘贴错误,使用地图将索引与字体大小相关联可能是有益的并使用索引(作为键)来访问字体或字体大小。

答案 3 :(得分:0)

以上是上述代码的工作版本。 JTextArea.setFont只能接受一个字体参数,你必须使用JTextArea的当前字体创建一个新字体,然后将sai字体设置为

的参数
JTextArea.setFont(myFont);

        fontsize.addActionListener(
                new ActionListener(){
                    public void actionPerformed(ActionEvent e)
                    {Font currFont = txt.getFont();
                        if(fontsize.getSelectedIndex()==0)
                        {
                            int newSize = 10;
                            Font myIdea = new Font(currFont.getFontName(),currFont.getStyle(),newSize);
                            txt.setFont(myIdea);
                            txt.setLineWrap(true);
                        }

                        else if(fontsize.getSelectedIndex()==1){
                            int newSize = 12;
                            Font myIdea = new Font(currFont.getFontName(),currFont.getStyle(),newSize);
                            txt.setFont(myIdea);
                            txt.setLineWrap(true);
                    }
                        else if(fontsize.getSelectedIndex()==2){

                            int newSize = 14;
                            Font myIdea = new Font(currFont.getFontName(),currFont.getStyle(),newSize);
                            txt.setFont(myIdea);
                            txt.setLineWrap(true);
                }
                        else if(fontsize.getSelectedIndex()==3){
                            int newSize = 16;
                            Font myIdea = new Font(currFont.getFontName(),currFont.getStyle(),newSize);
                            txt.setFont(myIdea);
                            txt.setLineWrap(true);
                }
                        else{}
                    }
                }
                );

答案 4 :(得分:0)

这就是我使用HashMap解决此问题的方法。

fontsize.addActionListener( new ActionListener(){ HashMap<Integer, Integer> fontSizeMap = new HashMap<Integer, Integer>(); int max = 4; int minSize = 10; { for(int i = 0; i< max; i++) { int fontSize = newSize + (2 * i); fontSizeMap.put(i, fontSize); } }

    public void actionPerformed (ActionEvent e) {
        Font currFont = txt.getFont();
        int index = fontsize.getSelectedIndex();
        if(fontSizeMap.get(index) != null)
        {
            int newSize = fontSizeMap.get(index);
            Font myIdea = new Font(currFont.getFontName(),currFont.getStyle(),newSize);
            txt.setFont(myIdea);
            txt.setLineWrap(true);
        } else {
            // do nothing or handle this case differently.
        }
    }
});