Java 文本字段中的文本将显示,但在组合框中选择时不会更改字体

Java 文本字段中的文本将显示,但在组合框中选择时不会更改字体,java,swing,fonts,jlabel,jcombobox,Java,Swing,Fonts,Jlabel,Jcombobox,此代码是关于用户在文本字段中插入文本并将文本传输到标签,然后用户可以在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.J

此代码是关于用户在文本字段中插入文本并将文本传输到标签,然后用户可以在
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

中选择字体时字体不会改变。这修复了
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));
            } 
        }
    });

您是否向侦听器添加了调试代码?向每个if条件添加一个简单的System.out.println(…)语句,以查看正在执行的代码块。我不知道为什么会有3个if语句具有相同的if条件。我将joptionpane放在每个if else语句的末尾,。仅当语句执行时,其他语句不执行..
panels.setLayout(null)1)Java GUI必须在不同的操作系统、屏幕大小、屏幕分辨率等上工作,在不同的地区使用不同的PLAF。因此,它们不利于像素完美布局。而是使用布局管理器,或与布局填充和边框一起使用。2) 为了更快地获得更好的帮助,请发布一个or。