как добавить списки действий для 2 наборов радиокнопок

Я делаю каркас из 3-х панелей. На 1 панели есть текст, на 1 есть переключатели для изменения шрифта, в котором появляется высказывание, а на последней панели есть переключатели для изменения размера шрифта. У меня все сделано, но я не понимаю, как добавить прослушиватель действий для переключателей размера. Кто-нибудь может мне с этим помочь? Код для прослушивателя действий находится внизу. Большое спасибо!

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

public class Layouts extends JPanel implements ActionListener
{
    int style = Font.PLAIN;
    String font = "Arial";
    private JLabel saying, overAll, top, sizeP, fontP;
    private JPanel panel1, panel2, panel3, panel4;
    private JRadioButton style1, style2, style3, style4, size1, size2, size3, size4;
    //-----------------------------------------------------------------
    //  Sets up a panel with a label and some check boxes that
    //  control the style of the label's font.
    //-----------------------------------------------------------------
    public Layouts()
    {
        style1 = new JRadioButton ("Arial", true);
        style2 = new JRadioButton ("Times New Roman", false);
        style3 = new JRadioButton ("Verdana", false);
        style4 = new JRadioButton ("Thonburi", false);

        size1 = new JRadioButton ("36", false);
        size2 = new JRadioButton ("24", false);
        size3 = new JRadioButton ("20", false);
        size4 = new JRadioButton ("16", true);

        panel1 = new JPanel();
        panel2 = new JPanel();
        panel3 = new JPanel();

        saying = new JLabel ("Say it with style!");
        saying.setFont (new Font ("Helvetica", Font.PLAIN, 36)); // we'll need this later

        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);

        ButtonGroup group2 = new ButtonGroup();
        group.add(size1);
        group.add(size2);
        group.add(size3);
        group.add(size4);

        size1.addActionListener (this);
        size2.addActionListener (this);
        size3.addActionListener (this);
        size4.addActionListener (this);

        setBackground (Color.red);
        setPreferredSize (new Dimension(500, 100));

        setLayout(new BorderLayout());
        add(panel1, BorderLayout.NORTH);
        add(panel2, BorderLayout.EAST);
        add(panel3, BorderLayout.WEST);

        //add(panel2, East);
        //add(panel3, West);

        panel1.add(saying);
        panel1.setBackground(Color.yellow);

        panel2.setLayout(new GridLayout());
        panel2.setBackground(Color.red);
        panel2.add(style1);
        panel2.add(style2);
        panel2.add(style3);
        panel2.add(style4);

        panel3.setLayout(new BoxLayout(panel3, BoxLayout.Y_AXIS));
        panel3.setBackground(Color.red);
        panel3.add(size1);
        panel3.add(size2);
        panel3.add(size3);
        panel3.add(size4);
    }
    //*****************************************************************
    //  Represents the listener for both check boxes and the radio boxes.
    //*****************************************************************
    public void actionPerformed(ActionEvent e) // this is our bread and butter, it is basically what we will be changing
    {
        Object source = e.getSource();

        if (style1.isSelected())
            font = "Arial";
        else
            if (style2.isSelected())
                font = "Times New Roman";
            else
                if (style3.isSelected())
                    font = "Verdana";
                else
                    if (style4.isSelected())
                        font = "Thonburi";
        saying.setFont(new Font (font, style, 36));
    }
    public static void main (String[] args)
    {
        JFrame frame = new JFrame ("Layouts");
        frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

        Layouts panel = new Layouts();
        frame.getContentPane().add(panel);

        frame.pack();
        frame.setVisible(true);
    }
}

person Josh    schedule 03.11.2010    source источник
comment
Есть ли способ, которым я могу использовать actionListener для изменения размера текста, просто расширив существующий оператор if else? Увидев ответы, я думаю, что именно так я и должен поступать, я недостаточно узнал о некоторых вещах, на которые ссылаются, чтобы иметь возможность сделать это одним из этих способов.   -  person Josh    schedule 04.11.2010


Ответы (2)


Вам не нужно жестко кодировать style1-4 в слушателе. Видите, как вы получили источник действия, но так и не воспользовались им? Этот источник является объектом переключателя, который запустил это событие. Вы можете просто получить метку на переключателе для значения. А затем просто установите шрифт в соответствии со значением метки переключателя, который только что запустил событие. Также вы можете разделить это на два обработчика событий, по одному для каждого набора переключателей. Облегчает чтение и облегчает определение того, какой набор нажимается.

person shoebox639    schedule 03.11.2010

вместо

saying.setFont(new Font (font, style, 36));

в вашем методе actionPerformed попробуйте следующее:

saying.setFont(new JLabel().getFont()); // get the default font from a new JLabel
this.repaint();

поэтому кажется, что что-то не так со шрифтами, которые вы хотите отобразить. На самом ли деле шрифты установлены на вашем компьютере? Действительно ли System.out.println(new Font("Arial",style,36).getFamily()); печатает Arial или что-то в этом роде. еще?

person fasseg    schedule 03.11.2010
comment
Шрифты на самом деле работают, я просто не уверен, как реализовать прослушиватель действий для размеров. Когда я нажимаю один из четырех переключателей для стиля, он меняет стиль высказывания, которое находится на верхней панели. - person Josh; 04.11.2010