2017-10-06 3 views
1

Dieser Code ist über den Benutzer Text in das Textfeld einfügen und den Text auf Label dann Benutzer kann Schriftart in JComboBox wählen, wo der angezeigte Text Schriftart geändert wird, wenn Benutzer wählen Schriftart.Text im Textfeld wird angezeigt, ändert aber nicht die Schrift bei der Auswahl in der Combobox

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*/  
     } 
    } 
    }); 
} 

} 

Ich habe Probleme zu korrigieren dieses Problem, ich weiß nicht, wo die wichtigste Quelle des Problems ist, warum denn die Schrift wird nicht ändern, wenn sie in JComboBox wählen zu sein.

+3

Haben Sie Ihrem Listener Debug-Code hinzugefügt? Fügen Sie jeder if-Bedingung eine einfache System.out.println-Anweisung (...) hinzu, um zu sehen, welcher Codeblock gerade ausgeführt wird. Ich habe keine Ahnung, warum Sie 3 if-Anweisungen mit derselben Bedingung haben. – camickr

+0

Ich setze joptionpane am Ende jeder, wenn sonst Aussage. nur wenn Anweisung ausgeführt wird, die anderen nicht .. –

+0

'panels.setLayout (null);' 1) Java GUIs müssen auf verschiedenen Betriebssystemen, Bildschirmgröße, Bildschirmauflösung usw. mit verschiedenen PLAFs in verschiedenen Gebietsschemas arbeiten. Als solche sind sie nicht für ein perfektes Pixel-Layout geeignet. Verwenden Sie stattdessen Layout-Manager oder [Kombinationen davon] (http://stackoverflow.com/a/5630271/418556) zusammen mit Layout-Auffüllung und Rahmen für [Leerraum] (http://stackoverflow.com/a/17874718/ 418556). 2) Um eine bessere Hilfe zu erhalten, sollten Sie ein [MCVE] oder [Short, Self Contained, Correct Example] (http://www.sscce.org/) veröffentlichen. –

Antwort

1

Dies behebt die mehreren Logikprobleme in der itemStateChanged-Methode (und funktioniert für jede der Schriftarten). Ich würde normalerweise ActionListener für Kombinationsfelder verwenden, aber 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

ich sehe. Was ist falsch in meinem Code .. ich denke daran .. –

Verwandte Themen