gpt4 book ai didi

Java 按钮 Action 监听器会触发其他监听器吗?

转载 作者:行者123 更新时间:2023-12-02 05:07:12 25 4
gpt4 key购买 nike

我的 Main 类中有两个监听器,labelButton 监听器更改 JLabel 中的文本,另一个 colorButton 更改圆圈内的颜色。由于某种原因,当我单击 labelButton 时,它也会触发 colorButton,但仅在第一次单击时才会执行此操作。我只想改变 JLabel 中的文本!

public class Main {
JFrame jframe;
JLabel label;
public static void main(String[] args) {
Main main = new Main();
main.go();
}

public void go() {
jframe = new JFrame();
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JButton labelButton = new JButton("Change Label");
labelButton.addActionListener(new LabelListener());

JButton colourButton = new JButton("Change colours!");
colourButton.addActionListener(new ColourListener());

label = new JLabel("I'm a label");

MyComponent component = new MyComponent();
jframe.getContentPane().add(BorderLayout.SOUTH, colourButton);
jframe.getContentPane().add(BorderLayout.CENTER, component);
jframe.getContentPane().add(BorderLayout.EAST, labelButton);
jframe.getContentPane().add(BorderLayout.WEST, label);

jframe.setSize(400,400);
jframe.setVisible(true);
}

class LabelListener implements ActionListener {
int i = 0;
@Override
public void actionPerformed(ActionEvent e) {
label.setText("Ouch! " + i++);
}
}

class ColourListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
jframe.repaint();
}
}
}

组件

public class MyComponent extends JPanel{
@Override
public void paintComponent(Graphics g) {
super.paintComponents(g);
Graphics2D g2d = (Graphics2D) g;
int red = (int) (Math.random() * 256);
int green = (int) (Math.random() * 256);
int blue = (int) (Math.random() * 256);

Color colour = new Color(red,green,blue);
red = (int) (Math.random() * 256);
green = (int) (Math.random() * 256);
blue = (int) (Math.random() * 256);

Color endColour = new Color(red,green,blue);

GradientPaint gradient = new GradientPaint(70,70,colour,150,150,endColour);

g2d.setPaint(gradient);
g2d.fillOval(70, 70, 100, 100);
}
}

最佳答案

标签的更改,因为它是透明的,将导致父容器被重新绘制,以消除任何可能的图形伪影。

因为 paintComponent 方法对颜色进行随机化,这意味着每次重新绘制时,颜色都会发生变化。

这是一个很好的例子,说明了如何不控制绘制过程以及为什么您的绘制方法应该只绘制组件的当前状态。

将颜色随机化删除到另一个方法,并从您的 actionListener 中调用该方法,该方法也会调用 repaint 本身

关于Java 按钮 Action 监听器会触发其他监听器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27680365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com