Question

I am currently stumped on how to use arrays to complete an assignment. I've looked through the forums and used google with little luck. I would really appreciate any advice that someone can spare. Thank you very much!:

  1. Create the arrays for my 2 sets of radio buttons as well as for the font sizes and for fonts

  2. Remove all references to individual JRadioButtons (style1, style2, ....size1, size2, etc.). Instead, array values must be used. Once you are done modifying all of your code I should only have to change the program in one place to change all aspects of the size. For instance, changing a value in your font array should change the font size option AND the label that displays that font size.

  3. The sizes of your JRadioButton arrays should be directly related to the length of your int and String arrays. So if I have six different sizes to choose from, you should have six JRadioButtons in your array.

  4. Test your code by adding two additional font styles to your styles array.

  5. Test your code by adding two additional sizes to your size array.

  6. You may have to modify your actionPerformed method to match that from the JRadioButtons example in Chapter 5 where you check for a specific event.

So in my two arrays that I didn't already initialize, I made them size 7 to allow me to add two more sizes and two more fonts. I am stumped on how to call the index of the array in the actionListener. What would be a good tutorial for working with radio buttons and arrays?

Here is my current code:

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

}
Was it helpful?

Solution

You can create them from the font array like this:

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

Same procedure for the size array, I just left it out to keep it short.

OTHER TIPS

For starters, anything you can do with an object, you could do with an array value of that object type. So if you have an array of JRadio buttons, and RadioButton.addActionListener(this) is a legal call, Array[0].addActionListener(this) is a legal call, as would be (this is psuedocode, not Java)

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

Given that, it looks like you could use Arrays of values like size/font type and iterate through them to create your buttons. If you have 10 sizes in an array, you could do

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

Or something along those lines. I think that iterating through values in order to create/modify objects is what is being looked for here.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top