Полный отказ от ответственности: я студент CS, и этот вопрос связан с недавно назначенной Java-программой для объектно-ориентированного программирования. Несмотря на то, что мы сделали некоторые вещи для консоли, мы впервые работаем с графическим интерфейсом и Swing или Awt. Нам дали некоторый код, который создал окно с текстом и кнопку, которая поворачивалась на разные цвета для текста. Затем нас попросили изменить программу, чтобы вместо нее создать переключатели для цветов - это также должно было дать нам возможность изучить API. Я уже сдал свое задание и получил разрешение от моего инструктора опубликовать свой код здесь.
Какой лучший способ реализовать действия кнопок в Java? После некоторого возни я создал такие кнопки:
class HelloComponent3 extends JComponent
implements MouseMotionListener, ActionListener
{
int messageX = 75, messageY= 175;
String theMessage;
String redString = "red", blueString = "blue", greenString = "green";
String magentaString = "magenta", blackString = "black", resetString = "reset";
JButton resetButton;
JRadioButton redButton, blueButton, greenButton, magentaButton, blackButton;
ButtonGroup colorButtons;
public HelloComponent3(String message) {
theMessage = message;
//intialize the reset button
resetButton = new JButton("Reset");
resetButton.setActionCommand(resetString);
resetButton.addActionListener(this);
//intialize our radio buttons with actions and labels
redButton = new JRadioButton("Red");
redButton.setActionCommand(redString);
...
И добавленные слушатели действий ...
redButton.addActionListener(this);
blueButton.addActionListener(this);
...
Для метода actionPerformed уже была создана заглушка, чтобы дать нам представление о том, как ее использовать, но поскольку в шаблоне была только одна кнопка, было непонятно, как реализовать несколько кнопок. Я попытался включить String, но быстро понял, что, поскольку String не является примитивным типом, я не смог использовать его для оператора switch. Я мог бы импровизировать с цепочкой if-else, но вместо этого я придумал. Это кажется далеко не элегантным, и должен быть лучший способ. Если есть, что это? Есть ли способ включить строку? Или выбрать действие в более широком масштабе?
public void actionPerformed(ActionEvent e){
if (e.getActionCommand().equals(resetString)) {
messageX = 75; messageY = 175;
setForeground(Color.black);
blackButton.setSelected(true);
repaint();
return;
}
if ( e.getActionCommand().equals(redString) ) {
setForeground(Color.red);
repaint();
return;
}
if ( e.getActionCommand().equals(blueString) ) {
setForeground(Color.blue);
repaint();
return;
}
if ( e.getActionCommand().equals(greenString) ) {
setForeground(Color.green);
repaint();
return;
}
if ( e.getActionCommand().equals(magentaString) ) {
setForeground(Color.magenta);
repaint();
return;
}
if ( e.getActionCommand().equals(blackString) ) {
setForeground(Color.black);
repaint();
return;
}
}