Напишите WidgetViewer GUI, который имеет следующие виджеты:
кнопка с меткой "go вверх / вниз" метка, инициализированная 0 (назовем ее левой меткой) метка, инициализированная 0 (мы назовем ее правой меткой), кнопка с меткой «go вниз / вверх»
Когда нажата кнопка «go вверх / вниз», случайное число между 1 и 10 (включительно) генерируются и добавляются к левой метке, а другое случайное число от 1 до 10 (включительно) генерируется и вычитается из правой метки.
Когда "go вниз / вверх "кнопка нажата, случайное число от 1 до 10 (включительно) генерируется и вычитается из левой метки, а другое случайное число от 1 до 10 (включительно) генерируется и добавляется к правой метке.
Итак, есть несколько важных вещей, которые мы должны извлечь из этого.
- Значения изначально инициализированы как 0
- Вам нужно обновить метку, когда кнопка срабатывает
- Депе Определение того, какая кнопка сработала, определит, какие значения добавляются или вычитаются в
Итак, мы могли бы просто начать с
class IncrementDecrementAction implements ActionListener {
private final JLabel leftLabel;
private final JLabel rightLabel;
private int leftValue = 0;
private int rightValue = 0;
public IncrementDecrementAction(JLabel leftLabel, JLabel rightLabel) {
this.leftLabel = leftLabel;
this.rightLabel = rightLabel;
}
@Override
public void actionPerformed(ActionEvent e) {
int rand = (int) (Math.random() * 10) + 1;
leftValue += rand;
rand = (int) (Math.random() * 10) + 1;
rightValue += rand;
this.leftLabel.setText(Integer.toString(leftValue));
this.rightLabel.setText(Integer.toString(rightValue));
}
}
Хорошо, но это только решает проблему в в одном направлении, как насчет «вниз / вверх»?
Ну, мы могли бы написать вторую ActionListener
, которая справилась бы с этим, но тогда вам понадобится какая-то модель для поддержания левого и правого значений, чтобы оба слушателя знал, какова текущая стоимость. Не лишенная смысла идея, но для ее работы нужны два дополнительных класса.
Вместо этого мы можем воспользоваться поддержкой ActionEvent
s actionCommand
и дать каждой кнопке определенное имя c, который мы можем найти, когда действие запускается ...
class IncrementDecrementAction implements ActionListener {
private final JLabel leftLabel;
private final JLabel rightLabel;
private int leftValue = 0;
private int rightValue = 0;
public IncrementDecrementAction(JLabel leftLabel, JLabel rightLabel) {
this.leftLabel = leftLabel;
this.rightLabel = rightLabel;
}
@Override
public void actionPerformed(ActionEvent e) {
int leftRandom = (int) (Math.random() * 10) + 1;
int rightRandom = (int) (Math.random() * 10) + 1;
if (e.getActionCommand().equals("upDown")) {
leftValue += leftRandom;
rightValue -= rightRandom;
} else if (e.getActionCommand().equals("downUp")) {
leftValue -= leftRandom;
rightValue += rightRandom;
}
this.leftLabel.setText(Integer.toString(leftValue));
this.rightLabel.setText(Integer.toString(rightValue));
}
}
Это в основном меняет направление расчета на основе источника события - и делает это без необходимости знать, каков источник Событие фактически было (кнопка, пункт меню, связывание клавиш), ему просто все равно.
Вы просто устанавливаете это, применяя соответствующий actionCommand
к соответствующему Jbutton
, например ...
public class TestPane extends JPanel {
private JLabel leftLabel;
private JLabel rightLabel;
private JButton upDownButton;
private JButton downUpButton;
public TestPane() {
leftLabel = new JLabel("0");
rightLabel = new JLabel("0");
upDownButton = new JButton("Up/down");
downUpButton = new JButton("Down/up");
upDownButton.setActionCommand("upDown");
downUpButton.setActionCommand("downUp");
ActionListener actionListener = new IncrementDecrementAction(leftLabel, rightLabel);
upDownButton.addActionListener(actionListener);
downUpButton.addActionListener(actionListener);
add(leftLabel);
add(rightLabel);
add(upDownButton);
add(downUpButton);
}
}
Теперь, прежде чем перейти к этой точке, я рассмотрел дюжину или около того идей - моя цель состояла в том, чтобы постараться сделать это как можно проще, не пытаясь представить всю сложность. который, возможно, не нужно добавлять - будьте осторожны - я не знаю, каково намерение упражнения, поэтому я, возможно, пошел в неверном направлении от того, который ваш инструктор пытался заставить вас делать