gpt4 book ai didi

java - 当只有按钮对象具有 .addActionListener 时,为什么此代码中的 JFrame 会对 ActionEvents 使用react?

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

下面代码中的按钮对我来说是唯一应该监听 ActionEvents 的对象,但是当我调整窗口大小时,圆圈会改变颜色,这只会在按下按钮时发生。

在调整窗口大小时是否以某种方式使用frame.repaint()来为drawPanel对象生成新值,甚至在每次屏幕显示新的随机值时创建一个新的drawPanel对象?

测试.java

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Test implements ActionListener {

JFrame frame;
JButton button;

public static void main (String[] args) {
Test gui = new Test();
gui.go();
}

public void go() {
frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

button = new JButton("Pressme!");
button.addActionListener(this);

MyPanelDraw drawPanel = new MyPanelDraw();

frame.getContentPane().add(BorderLayout.SOUTH, button);
frame.getContentPane().add(BorderLayout.CENTER, drawPanel);
frame.setSize(300,300);
frame.setVisible(true);
}

public void actionPerformed (ActionEvent event) {

button.setText("Changed");
frame.repaint();

}

}

MyPanelDraw.java

import javax.swing.*;
import java.awt.*;

class MyPanelDraw extends JPanel {

public void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;

int red = (int) (Math.random() * 255);
int green = (int) (Math.random() * 255);
int blue = (int) (Math.random() * 255);
Color startColor = new Color(red, green, blue);

red = (int) (Math.random() * 255);
green = (int) (Math.random() * 255);
blue = (int) (Math.random() * 255);

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

GradientPaint gradient = new GradientPaint(70,70,startColor, 150,150, endColor);
g2d.setPaint(gradient);
g2d.fillOval(40,70,100,100);

}
}

最佳答案

重新验证容器时(调整大小时会发生这种情况)会调用 repaint 方法。每当 Swing 由于某种原因需要重绘组件时,都会调用 repaint 方法。您不应该依赖它不被调用。

关于java - 当只有按钮对象具有 .addActionListener 时,为什么此代码中的 JFrame 会对 ActionEvents 使用react?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1094544/

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