2016-03-25 12 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を見て、deriveFont(int)が実際に意味するものを参照してください。

何がderiveFont(int style)用パラメータリストに入れることになっていることフォントスタイル、ないフォントサイズです。そのため、フォントサイズを変更することができません。

公共フォントderiveFont(int型スタイル)

は、現在のFontオブジェクトを複製し新しいスタイルを適用することにより、新しいFontオブジェクトを生成します。

パラメータ:スタイル - 新しいFontのスタイル

あなたの現在のフォントからフォントサイズを変更したい場合は、あなたがこれを行うことができます:ここで

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

JComboBox.setFontは、何らかの理由でフォント用のコンストラクタではなく、設定するフォントである1つのパラメータしか受け入れることができないため、txt.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

のためのパラメータとして、SAIのフォントを設定しましたa 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

引数としてfloatを取るderiveFontメソッドを使用し、これは同じパラメータで新しいフォントが、新しいサイズを作成します。

Font biggerFont = fontss.deriveFont((float)10);  
関連する問題