Ereignisbehandlung in Java
11.04.2023 13:13:49
billy21
Ich kann den unten verlinkten Code nicht abrufen, um das zu erreichen, was ich möchte.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Gui {
static JFrame frame;
static JLabel label;
public static void main (String[] args) {
Gui gui = new Gui();
gui.go();
}
public void go () {
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400,300);
frame.setVisible(true);
MyDrawPanel panel = new MyDrawPanel();
frame.getContentPane().add(BorderLayout.CENTER, panel);
label = new JLabel("I'm a label");
frame.getContentPane().add(BorderLayout.WEST, label);
JButton colorButton = new JButton("Change Colors");
ColorButtonListener colorButtonListener = new ColorButtonListener();
colorButton.addActionListener(colorButtonListener);
frame.getContentPane().add(BorderLayout.SOUTH, colorButton);
JButton labelButton = new JButton("Change Label");
LabelButtonListener labelButtonListener = new LabelButtonListener();
labelButton.addActionListener(labelButtonListener);
frame.getContentPane().add(BorderLayout.EAST, labelButton);
}
}
class ColorButtonListener implements ActionListener {
JFrame frame = Gui.frame;
public void actionPerformed (ActionEvent event) {
frame.repaint();
}
}
class LabelButtonListener implements ActionListener {
JLabel label = Gui.label;
public void actionPerformed (ActionEvent event) {
if (label.getText() == "That hurt") {
label.setText("I'm a label");
} else {
label.setText("That hurt");
}
}
}
class MyDrawPanel extends JPanel {
public void paintComponent (Graphics g) {
Graphics2D g2d = (Graphics2D) g;
int red = (int) (Math.random() * 256);
int green = (int) (Math.random() * 256);
int blue = (int) (Math.random() * 256);
Color startColor = new Color(red, green, blue);
red = (int) (Math.random() * 256);
green = (int) (Math.random() * 256);
blue = (int) (Math.random() * 256);
Color endColor = new Color(red, green, blue);
GradientPaint gradient = new GradientPaint(70, 70, startColor, 150, 150, endColor);
g2d.setPaint(gradient);
g2d.fillOval(0, 0, this.getWidth(), this.getHeight());
}
}
Eine Panel-Klasse wird verwendet, um einen Kreis zu zeichnen, und das Panel wird dann im mittleren Bereich des Rahmens positioniert.
Eine Beschriftung befindet sich im westlichen Bereich des Rahmens, und zwei Schaltflächen, colorButton (befindet sich im Süden) und labelButton (befindet sich im Osten), sollten den Kreis bzw. die Beschriftung steuern. ColorButtonListener und LabelButtonListener sind zwei Klassen, die die ActionListener-Schnittstelle implementieren, die mit colorButton bzw. labelButton verknüpft sind. Wenn Sie darauf klicken, sollte die Farbschaltfläche einen Kreis mit verschiedenen Farben malen, und die Etikettenschaltfläche sollte zwischen den Sätzen Ich bin ein Label und Das tut weh umschalten.
Mein aktuelles Problem ist mit dem Label-Button. Wenn Sie darauf klicken, ändert es den Text (wie erwartet), aber es zeichnet auch den Kreis neu. Diese Schaltfläche sollte nicht zum Neuzeichnen des Kreises verwendet werden. Die Farbtaste funktioniert wie erwartet.
Anzeige