La creación de paneles con botones de radio que cambie el texto utilizando conjuntos
-
30-09-2019 - |
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:
-
Crear los arreglos para mis 2 juegos de botones de radio, así como para los tamaños de fuente y para las fuentes
-
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.
-
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.
-
Prueba de su código mediante la adición de dos estilos de fuentes adicionales a su gama de estilos.
-
Prueba de su código mediante la adición de dos tamaños adicionales a su matriz de tamaño.
-
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);
}
}
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í.