2016-03-25 119 views
1

我正在写一个写字板程序,并试图创建一个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{} 
         } 
        } 
        ); 
+0

你似乎并没有改变'fontss.deriveFont(10);' –

+0

的数字是的错,我的坏。 –

回答

0

fontss.deriveFont(10);的争论始终是10而不是硬编码一个数字作为在这种情况下完成的,可能是复制和粘贴错误,它可能是有益的使用地图字体大小指数关联并使用索引(作为键)来访问字体或字体大小。

+0

是的,这是一个错字,但即使改变它也不起作用。我很困惑你的地图是什么意思? –

+0

Java提供了许多收集类,允许您根据如何计划使用数据来使用与存储数据最相关的数据结构。 [HashMap中](https://docs.oracle.com/javase/7/docs/api/java/util/HashMap。html)就是这样一个集合类的一个例子。关于如何使用HashMap来解决这个问题,见下面的答案。 –

1

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

因为你根本没有改变大小。

您可能需要查看Java API for Font并查看deriveFont(int)的实际含义。

你应该在什么参数列表的地方为deriveFont(int style)字体样式,而不是字体大小。这就是为什么不能改变你的字体大小。

公共字体的deriveFont(INT风格)

通过复制当前Font对象并应用新的样式,创建一个新Font对象。

参数:风格 - 风格为新字体

如果你想从你的当前字体更改字体大小,你可以这样做:

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

输入txt.setFont(您的代码)时出错,因为JComboBox.setFont只能接受一个参数,该参数是要设置的字体,而不是某种原因的字体构造函数。但在你的帮助下,我能够调整我的想法并使程序正常工作!再次感谢您的回答!附加是我的想法。 –

+0

@ BobbyC.Robillard我的错误,我错过了我的代码中的'new Font()'。现在编辑。如果有帮助,您可以考虑接受解决方案。 – user3437460

0

这里是一个上面的代码的工作版本。 JTextArea.setFont只能采取一个参数,它是一个字体,你必须创建一个JTextArea中的当前字体一个新的字体,然后设置字体西作为参数

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{} 
        } 
       } 
       ); 
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. 
     } 
    } 
}); 
+0

如果您愿意,可以将for循环和初始化代码移动到其自己的方法。 –

1

使用的deriveFont方法,它采用一个float作为参数,这个人会创建一个新的字体使用相同的参数,但是新的大小。

Font biggerFont = fontss.deriveFont((float)10);  
相关问题