2017-10-06 25 views
1

このコードは、テキストフィールドにテキストを挿入し、テキストをラベルに転送することについてユーザがJComboBoxでフォントスタイルを選択できるようにします。ユーザーはフォントを選択します。テキストフィールド内のテキストが表示されますが、コンボボックスで選択するとフォントが変更されません

package hw; 

import java.awt.Color; 
import java.awt.Font; 
import java.awt.event.ItemEvent; 
import java.awt.event.ItemListener; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 

public class HW { 


public static void main(String[] args) { 

/*from this code is adding the frame, label, textfield, panels, panel background color and the location of the labels and textfields*/ 

    String [] cb = {"Comic Sans MS", "Times New Roman", "Arial Black"}; 
    JFrame frames = new JFrame(); 
    frames.setVisible(true); 
    frames.setSize(700, 500); 
    frames.setResizable(false); 
    frames.setLocation(170, 100); 
    JPanel panels = new JPanel(); 
    frames.add(panels); 
    panels.setBackground(new Color(40, 136, 168)); 
    panels.setLayout(null); 
    JTextField tf1 = new JTextField(); 
    panels.add(tf1); 
    tf1.setBounds(90, 150, 100, 25); 
    JLabel label1 = new JLabel("ENTER TEXT"); 
    panels.add(label1); 
    label1.setBounds(100, 30, 150, 100); 

    JLabel label2 = new JLabel("FONT STYLE"); 
    panels.add(label2); 
    label2.setBounds(400, 30, 150, 100); 
    JComboBox combo = new JComboBox(cb); 
    panels.add(combo); 
    combo.setBounds(400, 150, 150, 25); 

    JLabel label3 = new JLabel(""); 
    panels.add(label3); 
    label3.setBounds(310, 250, 150, 100); 
    label3.setText(""); 

/* this part below is the itemlistener and itemevent, i dont know the if this part below is correct because the font in the inserted text wont change but the text being insert in textfield is showing up in the jlabel*/ 

    combo.addItemListener(new ItemListener() { 

    @Override 
    public void itemStateChanged(ItemEvent event){ 
     String word; 

     if (event.getStateChange()==ItemEvent.SELECTED){ 

     label3.setText(word=tf1.getText()); 
     label3.setFont(new Font("Comic Sans MS", Font.PLAIN, 14)); 
     } 

     else if (event.getStateChange()==ItemEvent.SELECTED) { 
     label3.setText(word=tf1.getText()); 
     label3.setFont(new Font("Times New Roman", Font.PLAIN, 14)); 
     } 

     else if (event.getStateChange()==ItemEvent.SELECTED) { 
     label3.setText(word=tf1.getText()); 
     label3.setFont(new Font("Arial Black", Font.PLAIN, 14)); 
     } 

    /* the else and else if statement is not working, i dont know how to correct this problem*/  
     } 
    } 
    }); 
} 

} 

私はトラブルにこの問題を修正する必要があり、私は彼らがJComboBoxで選択された場合、フォントは変更に文句を言わない理由は、問題の主な原因がどこにあるか知りません。

+3

リスナーにデバッグコードを追加しましたか?実行されているコードのブロックを確認するために、各if条件に単純なSystem.out.println(...)ステートメントを追加します。同じif条件のif文がなぜ3つあるのかわかりません。 – camickr

+0

if else文の末尾にjoptionpaneを入れます。 –

+0

'panels.setLayout(null);' 1)Java GUIは、異なるロケールで異なるPLAFを使用する異なるOS、画面サイズ、画面解像度などで動作する必要があります。したがって、ピクセルの完全なレイアウトには役立ちません。代わりに、レイアウトマネージャや[それらの組み合わせ](http://stackoverflow.com/a/5630271/418556)と[空白](http://stackoverflow.com/a/17874718/)のレイアウトパディングとボーダーを使用してください。 418556)。 2)すぐに助けを得るために、[MCVE]または[短く、自己完結型の正しい例](http://www.sscce.org/)を投稿してください。 –

答えて

1

これは、itemStateChangedメソッドの複数のロジック問題を解決します(各フォントで機能します)。私は通常、コンボボックスにはActionListenerを使用しますが、YMMVは使用しません。

combo.addItemListener(new ItemListener() { 

     @Override 
     public void itemStateChanged(ItemEvent event) { 
      String fontName = combo.getSelectedItem().toString(); 

      if (event.getStateChange() == ItemEvent.SELECTED) { 
       label3.setText(tf1.getText()); 
       label3.setFont(new Font(fontName, Font.PLAIN, 14)); 
      } 
     } 
    }); 
+0

私は参照してください。私のコードで何が間違っている..私はそれを念頭に置く.. –

関連する問題