2017-10-06 92 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(...)语句以查看哪个代码块正在执行。我不知道为什么你有3条if条件相同的语句。 – camickr

+0

我把joptionpane放在每个if else语句的末尾。只有if语句执行,其他人不.. –

+0

'panels.setLayout(NULL);'1)Java的图形用户界面在不同的地区使用不同的PLAFs在不同的操作系统”,屏幕大小,屏幕分辨率等工作。因此,它们不利于像素的完美布局。请使用布局管理器或[它们的组合](http://stackoverflow.com/a/5630271/418556)以及[white space]的布局填充和边框(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

我明白了。我的代码有什么问题..我记住这一点.. –

相关问题