2010-10-12 12 views
0

J'ai des problèmes avec cette tâche, car mon actionlisteners. À l'heure actuelle, le panneau a 2 cases à cocher pour changer la police en gras et/ou en italique. Je veux ajouter 4 boutons radio qui peuvent changer la police dans laquelle le "dire" est po Quelqu'un peut-il me dire ce que je fais mal avec mes actionlisteners? Je vous remercie!Java Panel modification de la police boutons radio

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

public class StyleOptionsPanel extends JPanel implements ActionListener, ItemListener 
{ 
private JLabel saying; 
private JCheckBox bold, italic; // have a button for style1, button for style2, button for style3 
private JRadioButton style1, style2, style3, style4; //creates the buttons for each of the 4 styles 
{ 
    bold = new JCheckBox ("Bold", true); 
    italic = new JCheckBox ("Italic", true); 

    style1 = new JRadioButton ("Arial", true); 
    style2 = new JRadioButton ("Times New Roman", false); 
    style3 = new JRadioButton ("Verdana", false); 
    style4 = new JRadioButton ("Thonburi", false); 

    //also check out quote options panel file for example of radio buttons. 
    //after creating your radio buttons, you have to create a button group. copy line exactly from quote options panel 
    //comedy = new JRadioButton ("Comedy", true); - example of assigning radio button 
    //comedy.setBackground (Color.green); 
    ButtonGroup group = new ButtonGroup(); //use this code for the homework 
    group.add (style1); 
    group.add (style2); 
    group.add (style3); 
    group.add (style4); 

    style1.addActionListener (this); 
    style2.addActionListener (this); 
    style3.addActionListener (this); 
    style4.addActionListener (this); 

    add (style1); 
    add (style2); 
    add (style3); 
    add (style4); 
} 
//----------------------------------------------------------------- 
// Sets up a panel with a label and some check boxes that 
// control the style of the label's font. 
//----------------------------------------------------------------- 
public StyleOptionsPanel() 
{ 
    saying = new JLabel ("Say it with style!"); 
    saying.setFont (new Font ("Helvetica", Font.PLAIN, 36)); // we'll need this later 

    bold = new JCheckBox ("Bold"); // what is in quotes doesn't have to match variable being created but it should be descriptive 
    bold.setBackground (Color.green); // you can also set the background color of the checkbox 
    italic = new JCheckBox ("Italic"); 
    italic.setBackground (Color.green); // this doesn't seem to change anything for me? 

    //StyleListener listener = new StyleListener(); //whenever you create a textbox, you have to add a listener for it 
    //bold.addActionListener (listener); 
    //italic.addActionListener (listener); 

    add (saying); //it matters what order these go in, it affects the way that your program looks 
    add (bold); 
    add (italic); 
    add (style1); 
    add (style2); 
    add (style3); 
    add (style4); 

    setBackground (Color.cyan); 
    setPreferredSize (new Dimension(300, 100)); 
} 

//***************************************************************** 
// Represents the listener for both check boxes and the radio boxes. 
//***************************************************************** 
private class StyleListener implements ActionListener, ItemListener 
{ 
    //-------------------------------------------------------------- 
    // Updates the style of the label font style. 
    //-------------------------------------------------------------- 
    public void itemStateChanged(ItemEvent e) 
    { 
     int style = Font.PLAIN; 

     if (bold.isSelected()) //this is a boolean statement, on the inside you will always expect some kind of boolean statement 
      style = Font.BOLD; 

     if (italic.isSelected()) 
      style += Font.ITALIC; // style += means that it takes whatever style the font already is and then adds the value Italic to it 
     //public void actionPerformed (ActionEvent event) //also use this code in homework 

     Object source = e.getSource();// TODO Auto-generated method stub 

    } 

    public void actionPerformed(ActionEvent e) // this is our bread and butter, it is basically what we will be changing 
    { 


     if (source == style1) //if (source == style1) 
      saying.setText (Arial); //quote.setText(Helvetica) 
     else (source == style2) 
     saying.setText (TimesNewRoman); 
     else (source == style3) 
     saying.setText (Verdana); 
     else (source == style4) 
     saying.setText(Thonburi); 
    } 

} 

@Override 
public void itemStateChanged(ItemEvent e) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void actionPerformed(ActionEvent e) { 
    // TODO Auto-generated method stub 

} 

}

Répondre

1

Comme réponse précédente, vous ajoutez le mauvais ActionListener.

StyleListener styleListener = new StyleListener(); 
style1.addActionListener(styleListener); 
style2.addActionListener(styleListener); 
style3.addActionListener(styleListener); 
style4.addActionListener(styleListener); 

et vous devriez aussi faire la même chose pour les cases à cocher

bold.addItemListener(styleListener); 
italic.addItemListener(styleListener); 

Votre principale StyleOptionsPanel ne doit pas être être un auditeur.

1

Vous ajoutez cela comme un ActionListener à vos boutons radio, mais les méthodes d'écoute sont implémentés dans une classe StyleListener séparée.