Création de panneaux avec des boutons radio que le texte de modification à l'aide de tableaux

StackOverflow https://stackoverflow.com/questions/4137563

Question

Je suis actuellement perplexe sur la façon d'utiliser des tableaux pour accomplir une mission. Je l'ai regardé à travers les forums et Google utilisés avec peu de chance. Je voudrais vraiment apprécier tous les conseils que quelqu'un peut épargner. Merci beaucoup:

  1. Créer des tableaux pour mes 2 jeux de boutons radio, ainsi que pour la taille des polices et des polices

  2. Supprimez toutes les références à JRadioButtons individuelles (style1, style2, .... taille1, size2, etc.). , Les valeurs du tableau doivent plutôt être utilisés. Une fois que vous avez fini de modifier tout votre code que je ne devrais changer le programme en un seul endroit pour changer tous les aspects de la taille. Par exemple, modifier une valeur dans votre tableau de police devrait changer l'option de taille de la police et l'étiquette qui affiche que la taille de la police.

  3. Les dimensions de vos tableaux JRadioButton doit être directement liée à la longueur de votre int et des tableaux de chaîne. Donc, si j'ai six tailles différentes à choisir, vous devriez avoir six JRadioButtons dans votre tableau.

  4. Testez votre code en ajoutant deux styles de police supplémentaires à votre tableau de styles.

  5. Testez votre code en ajoutant deux tailles supplémentaires à votre tableau de taille.

  6. Vous devrez peut-être modifier votre méthode actionPerformed pour correspondre à celle de l'exemple de JRadioButtons au chapitre 5 où vous vérifiez pour un événement spécifique.

Donc, dans mes deux tableaux que je ne l'ai pas déjà initialize, je leur ai fait la taille 7 pour me permettre d'ajouter deux tailles et deux autres polices. Je suis perplexe sur la façon d'appeler l'index du tableau dans le actionListener. Quel serait un bon tutoriel pour travailler avec des boutons radio et des réseaux?

Voici mon code actuel:

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

}
Était-ce utile?

La solution

Vous pouvez les créer à partir du tableau font comme ceci:

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

La même procédure pour le tableau de taille, je ne l'a laissé sur le garder court.

Autres conseils

Pour commencer, tout ce que vous pouvez faire avec un objet, vous pouvez le faire avec une valeur de tableau de ce type d'objet. Donc, si vous avez un tableau de boutons JRadio et RadioButton.addActionListener (ce) est un appel juridique, Array [0] .addActionListener (ce) est un appel juridique, serait comme être (ce qui est psuedocode, pas Java)

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

Étant donné que, il semble que vous pouvez utiliser des tableaux de valeurs telles que la taille / le type de police et itérer à travers eux pour créer vos boutons. Si vous avez 10 tailles dans un tableau, vous pouvez faire

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

Ou quelque chose de ce genre. Je pense que itérer valeurs afin de créer / modifier des objets est ce qui est recherché ici.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top