使用单选按钮创建面板,使用数组更改文本

时间:2010-11-09 19:22:36

标签: java arrays radio-button actionlistener

我目前难以理解如何使用数组来完成作业。我浏览过论坛,用谷歌运气不好。我真的很感激有人可以提供的任何建议。非常感谢!:

  1. 为我的2组单选按钮以及字体大小和字体创建数组

  2. 删除对单个JRadioButtons(style1,style2,.... size1,size2等)的所有引用。相反,必须使用数组值。修改完所有代码后,我只需要在一个地方更改程序即可更改大小的所有方面。例如,更改字体数组中的值应更改字体大小选项和显示该字体大小的标签。

  3. JRadioButton数组的大小应与int和String数组的长度直接相关。因此,如果我有六种不同的尺寸可供选择,你的阵列中应该有六个JRadioButtons。

  4. 通过在样式数组中添加两种额外的字体样式来测试代码。

  5. 通过在尺寸数组中添加两个额外尺寸来测试代码。

  6. 您可能需要修改actionPerformed方法,以匹配第5章中检查特定事件的JRadioButtons示例。

  7. 所以在我的两个数组中,我还没有初始化,我将它们设为7,允许我添加两个以上的字体和两个以上的字体。我对如何在actionListener中调用数组的索引感到困惑。使用单选按钮和数组的好教程是什么?

    这是我目前的代码:

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    
    public class StyleArrays extends JPanel implements ActionListener
    {
     //declare the labels, panels, variables and radio buttons
    
     private JLabel saying;
     private JRadioButton style1, style2, style3, style4;
     private JRadioButton size1, size2, size3, size4;
     private JPanel top, right, left;
    
     JRadioButton[] size = new JRadioButton[7];
     JRadioButton[] font = new JRadioButton[7];
     String[] fonts = {"Arial", "Thonburi", "Rockwell", "Century Gothic"};
     int[] sizes = {18, 22, 26, 30};
    
     //declare the variables used later in the code the set the font and style
     //private String myFont = "Arial";
     //private int size = 18;
    
     //Constructor
     //-----------------------------------------------------------------
     public StyleArrays()
     {
    
      //set the layout of the Layouts panel that will contain all of the other panels
      setLayout (new BorderLayout());
      setBackground (Color.red);
    
      //create the new panels that will go inside the Layouts panel
      top= new JPanel();
      right= new JPanel();
      left= new JPanel();
    
      saying = new JLabel ("Say it with style!");
     // saying.setFont (new Font (myFont, Font.PLAIN, size));
    
      //set the layout and color of the top panel, and add the saying
      add(top, BorderLayout.NORTH);
      top.setBackground (Color.yellow);
      top.add(saying);
    
    
      //create size radio buttons
      size1 = new JRadioButton ("18", true);
      size1.setBackground (Color.red);
      size2 = new JRadioButton ("22");
      size2.setBackground (Color.red);
      size3 = new JRadioButton ("26");
      size3.setBackground (Color.red);
      size4 = new JRadioButton ("30");
      size4.setBackground (Color.red);
    
      //add listeners for each size buttons
    
      size1.addActionListener (this);
      size2.addActionListener (this);
      size3.addActionListener (this);
      size4.addActionListener (this);
    
      //add these buttons to this button group
      ButtonGroup group1 = new ButtonGroup();
      group1.add (size1);
      group1.add (size2);
      group1.add (size3);
      group1.add (size4);
    
    
      //set the layout and color of the left panel
      add(left, BorderLayout.WEST); //add the left panel to the border layout
      left.setLayout (new BoxLayout (left, BoxLayout.Y_AXIS)); //set the layout of left to box layout
      left.setBackground (Color.red); //set the color to red
    
      //display the buttons on the panel
      left.add (size1);
      left.add (size2);
      left.add (size3);
      left.add (size4);
    
      //This section deals with the panel that contains the STYLE  information
    
      add(right, BorderLayout.EAST); //add the right panel to the border layout
      right.setLayout (new GridLayout (2, 2)); //set the layout of right panel to grid layout
      right.setBackground (Color.red); // set the background color of the panel to red
    
      //create style radio buttons
      style1 = new JRadioButton ("Arial", true);
      style1.setBackground (Color.red);
      style2 = new JRadioButton ("Thonburi");
      style2.setBackground (Color.red);
      style3 = new JRadioButton ("Rockwell");
      style3.setBackground (Color.red);
      style4 = new JRadioButton ("Century Gothic");
      style4.setBackground (Color.red);
    
    
      //add listeners for each style button
      style1.addActionListener (this);
      style2.addActionListener (this);
      style3.addActionListener (this);
      style4.addActionListener (this);
    
      //add these buttons to this button group  
      ButtonGroup group2 = new ButtonGroup();
      group2.add (style1);
      group2.add (style2);
      group2.add (style3);
      group2.add (style4);
    
      //display the buttons on the panel
      right.add (style1);
      right.add (style2);
      right.add (style3);
      right.add (style4);
    
    
     }
    
     //*****************************************************************
     //  Represents the listener for both check boxes.
     //*****************************************************************
    
    
     //*****************************************************************
     //  Represents the listener for the radio buttons.
     //*****************************************************************
     public void actionPerformed (ActionEvent event)
     {
    
      Object source = event.getSource(); 
      if (source == size1) //if the event is that the size1 button is selected
       size = 18;    //assign 18 to the  variable
    
      if (source == size2)  
       size = 22; 
    
      if (source == size3) 
       size = 26; 
    
      if (source == size4) 
       size = 30; 
    
      if (source == style1) 
       myFont = "Arial"; 
    
      if (source == style2)  
       myFont = "Thonburi"; 
    
      if (source == style3) 
       myFont = "Rockwell"; 
    
      if (source == style4) 
       myFont = "Century Gothic"; 
    
      saying.setFont (new Font (myFont, Font.PLAIN, size)); //display the saying with the current value of 'myFont' and 'style'
    
     }
    
     public static void main (String[] args)
     {
      JFrame frame = new JFrame ("Style Arrays");
      frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
    
      StyleArrays panel = new StyleArrays();
      frame.getContentPane().add (panel);
    
      frame.pack();
      frame.setVisible(true);
     }
    
    }
    

2 个答案:

答案 0 :(得分:3)

对于初学者,你可以用一个对象做任何事情,你可以使用该对象类型的数组值。因此,如果你有一个JRadio按钮数组,并且RadioButton.addActionListener(this)是一个合法的调用,那么Array [0] .addActionListener(this)是一个合法的调用,因为它(这是伪代码,而不是Java)

for each index i of Array
   Array[i].addActionListener(this)

鉴于此,看起来您可以使用大小/字体类型等值的数组,并迭代它们来创建按钮。如果数组中有10个大小,则可以

for each index i of Sizes
    Array[i] = new JRadioButton(i)

或者那些东西。我认为迭代值以创建/修改对象是这里要查找的内容。

答案 1 :(得分:1)

您可以从字体数组中创建它们,如下所示:

public class StylePanel extends JPanel implements ActionListener {
 String[] fontArray = {"Arial", "Serif", "Courier", "Consolas"};
 JLabel   label;

 JRadioButton[] fontButtons = new JRadioButton[fontArray.length];
 ButtonGroup    fontGroup = new ButtonGroup();

 public StylePanel() {
  setLayout(new FlowLayout());
  label = new JLabel("Hello");
  add(label);
  for(int i = 0; i < fontButtons.length; i++) {
   fontButtons[i] = new JRadioButton();
   fontButtons[i].setText(fontArray[i]);
   fontButtons[i].addActionListener(this);
   fontGroup.add(fontButtons[i]);
   add(fontButtons[i]);
  }
 }

 @Override
 public void actionPerformed(ActionEvent e) {
  label.setFont(new Font(
    ((JRadioButton)e.getSource()).getText(), Font.PLAIN, 15));
 } 

 public static void main(String[] args) {
  StylePanel panel = new StylePanel();
  JFrame frame = new JFrame();
  frame.getContentPane().add(panel);
  frame.setSize(400, 300);
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.setVisible(true);
 }
}

相同的大小数组程序,我只是把它留空以保持简短。