Создание панелей с помощью радиопроизводительных кнопок, которые изменяют текст с помощью массивов
-
30-09-2019 - |
Вопрос
В настоящее время я наткнулся на то, как использовать массивы для выполнения задания. Я просмотрел форумы и использовал Google с небольшой удачей. Я был бы очень признателен за любые советы, которые кто -то может сэкономить. Большое тебе спасибо!:
Создайте массивы для моих двух наборов радиопроизводств, а также для размеров шрифтов и для шрифтов
Удалите все ссылки на отдельные Jradiobuttons (Style1, Style2, .... Size1, Size2 и т. Д.). Вместо этого должны использоваться значения массива. Как только вы закончите изменять весь свой код, я должен был изменить программу только в одном месте, чтобы изменить все аспекты размера. Например, изменение значения в массиве шрифтов должно изменить опцию размера шрифта и метку, которая отображает этот размер шрифта.
Размеры ваших массивов Jradiobutton должны быть напрямую связаны с длиной ваших массивов Int и String. Поэтому, если у меня есть шесть разных размеров на выбор, у вас должно быть шесть Jradiobuttons в вашем массиве.
Проверьте свой код, добавив два дополнительных стиля шрифта в массив стилей.
Проверьте свой код, добавив два дополнительных размера в массив размеров.
Возможно, вам придется изменить свой метод действия, чтобы соответствовать этому из примера jradiobuttons в главе 5, где вы проверяете конкретное событие.
Поэтому в двух моих массивах, которые я еще не инициализировал, я сделал их размером 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);
}
}
Решение
Вы можете создать их из массива шрифтов, как это:
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);
}
}
Такая же процедура для массива размеров, я просто оставил его, чтобы держать его коротким.
Другие советы
Для начала, все, что вы можете сделать с объектом, вы можете сделать со значением массива этого типа объекта. Так что, если у вас есть множество кнопок Jradio, а RadioButton.AddactionListener (это) - это юридический вызов, массив [0]. AddactionListener (это) является законным вызовом, как и (это Psuedocode, а не Java)
for each index i of Array
Array[i].addActionListener(this)
Учитывая это, похоже, что вы можете использовать массивы значений, такие как размер/тип шрифта, и обработать их для создания кнопок. Если у вас есть 10 размеров в массиве, вы могли бы сделать
for each index i of Sizes
Array[i] = new JRadioButton(i)
Или что-то вдоль этих линий. Я думаю, что итерация через значения для создания/изменения объектов - это то, что здесь ищут.