gpt4 book ai didi

java - JButton 的 doClick() 方法

转载 作者:行者123 更新时间:2023-12-02 03:08:06 27 4
gpt4 key购买 nike

JButton的doClick()方法触发了actionPerformed方法,但我想通过使用doClick()方法来触发paintComponent()!请帮忙!

这是建议的吗?这里我有一个标签,每次执行 doClick() 方法的操作时,其文本都会更改。但不幸的是,paintComponent方法执行的次数与actionPerformed()方法的执行次数不同。这只是建议作为答案的代码。我实际上想在从文件读取数据并根据文本文件中的数据绘制不同的形状时触发 doClick() 方法!

import javax.swing.*; 
import java.awt.*;
import java.awt.event.*;
public class myFrame {
JFrame jFrame;
myPanel bpanel;
JButton jbutton;
int radius;
JLabel label;
public myFrame() {
jFrame=new JFrame();
bpanel=new myPanel();
jbutton=new JButton("presss");
radius=50;
label=new JLabel(radius+" ");
bpanel.add(jbutton);
bpanel.add(label);
jbutton.addActionListener(new myButtonListener());
for (int i=0; i< 5; i++)
jbutton.doClick();
jFrame.getContentPane().add(bpanel);
jFrame.pack();
jFrame.setVisible(true);
}
public class myPanel extends JPanel {
public myPanel() {
setBackground(Color.cyan);
setPreferredSize(new Dimension(300,400));
}
public void paintComponent(Graphics g) {
System.out.println("paint component triggered");
super.paintComponent(g);
g.drawOval(0,0,radius,radius);
}
}
private class myButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
radius=radius+20;
label.setText(radius+" ");
bpanel.repaint();
System.out.println("mouse click event triggered");
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new myFrame();
}
});
}

}

最佳答案

but I want to trigger paintComponent() by use of doClick() method!

Swing 组件应该足够智能,能够在组件的属性更改时重新绘制自己。

例如,如果您在 JLabel 上使用 setText(...) 方法,标签会使用指定的文本重新绘制自身。

因此,当您单击按钮时,您应该通过调用类的方法来更改类的属性。然后在该方法中调用 repaint() 并且组件将重新绘制自身。

编辑:

n modify so that paintComponent method also executes for the same number of times as actionPerformed() is executing

代码有几个问题:

  1. 框架不可见,调用 doClick() 方法不会产生任何效果,因为只有在框架可见时才会绘制组件。因此动画代码需要在框架可见后执行

  2. 您不能使用循环。将发生以下两种情况之一:a) 循环执行速度如此之快,您将看不到组件的增量绘制,或者 b) 将向 RepaintManager 发出 repaint() 请求,RepaintManager 会将每个请求合并为单个绘制请求.

如果你想做动画那么你需要使用Swing Timer安排动画。

关于java - JButton 的 doClick() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41448629/

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