Pregunta

Actualmente estoy perplejo sobre cómo utilizar matrices para completar una tarea. He mirado a través de los foros y utilizó Google con poca suerte. Realmente agradecería cualquier consejo que alguien puede ahorrar. Muchas gracias:

  1. Crear los arreglos para mis 2 juegos de botones de radio, así como para los tamaños de fuente y para las fuentes

  2. Eliminar todas las referencias a JRadioButtons individuales (style1, style2, .... size1, tamaño 2, etc.). En su lugar, se deben usar valores de la matriz. Una vez que termine de modificar todo el código que sólo debería tener que cambiar el programa en un solo lugar para cambiar todos los aspectos del tamaño. Por ejemplo, el cambio de un valor en la matriz de la fuente debe cambiar la opción de tamaño de fuente y la etiqueta que muestra que el tamaño de fuente.

  3. Los tamaños de las matrices JRadioButton debe estar directamente relacionado con la longitud de su int y matrices de cadenas. Así que si tengo seis tamaños diferentes para elegir, usted debe tener seis JRadioButtons en su conjunto.

  4. Prueba de su código mediante la adición de dos estilos de fuentes adicionales a su gama de estilos.

  5. Prueba de su código mediante la adición de dos tamaños adicionales a su matriz de tamaño.

  6. Es posible que tenga que modificar su método actionPerformed para que coincida con el ejemplo JRadioButtons en el capítulo 5 donde el registro para un evento específico.

Así que en mis dos matrices que yo no ya de inicialización, los hice talla 7 para permitir que añada dos tamaños más y dos fuentes más. Estoy confundido acerca de cómo llamar al índice de la matriz en el actionListener. ¿Cuál sería un buen tutorial para trabajar con botones de radio y matrices?

Aquí está mi código actual:

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

}
¿Fue útil?

Solución

Se pueden crear a partir de la matriz de fuente de esta manera:

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

El mismo procedimiento que para la matriz de tamaño, sólo dejó fuera que sea breve.

Otros consejos

Para empezar, nada se puede hacer con un objeto, se podría hacer con un valor de matriz de ese tipo de objeto. Así que si usted tiene una serie de botones JRadio y RadioButton.addActionListener (esto) es una llamada legal, Array [0] .addActionListener (esto) es una llamada legal, como sería (esto es psuedocode, no Java)

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

Teniendo en cuenta que, parece que usted podría utilizar matrices de valores como el tamaño / tipo de fuente e iterar a través de ellos para crear sus botones. Si usted tiene 10 tamaños en una matriz, que podría hacer

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

O algo por el estilo. Creo que la iteración a través de valores con el fin de crear / modificar los objetos es lo que está siendo buscado aquí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top