gpt4 book ai didi

Java-JComponent paintComponent()

转载 作者:行者123 更新时间:2023-11-30 08:28:52 25 4
gpt4 key购买 nike

我想弄清楚如何repaint() 一个扩展JComponent 的类。我想让每个类都扩展 JComponent,然后提供它自己的 paintComponent()。 (super.paintComponent()。这样我就可以制作一个圆形类或任何我想制作的类,然后我可以随时repaint()它只要将它添加到 JFrame 中的 JPanel 即可。下面是运行所需的所有代码。

第 1 类:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

public class DDHGenericFrame extends JFrame {

private static final long serialVersionUID = 1L;

/* User defined class that is below */
DDHGenericPanel d = new DDHGenericPanel();

public DDHGenericFrame() {
initUI();
}

public final void initUI() {
add(d);
setSize(650, 350);
setTitle("Lines");
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public static void main(String[] args) {
DDHGenericFrame ex = new DDHGenericFrame();
ex.setVisible(true);
}
}

2 类:

import java.awt.Graphics;
import javax.swing.JPanel;

class DDHGenericPanel extends JPanel {
private static final long serialVersionUID = 1L;

DDHGenericPanel() {
System.out.println("DDH Generic JPanel");
}

@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
//paint code goes here of whatever
}
}

第 3 类:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JComponent;

public class DDHCircleOne extends JComponent {
private static final long serialVersionUID = 1L;

int counter = 0;

public DDHCircleOne() {
counter++;
System.out.println("DDHCircle Constructor");
}

public void paintComponent(Graphics g2) {
super.paintComponent(g2);
Graphics2D c2D = (Graphics2D) g2;
c2D.setColor(Color.yellow);
c2D.fillRect(0, 0, getSize().width, getSize().height);
if (counter % 2 == 2) {
System.out.println("RED");
counter++;
c2D.setColor(Color.red);
c2D.fillRect(0, 0, getSize().width, getSize().height);
} else {
System.out.println("BLUE");
counter++;
c2D.setColor(Color.blue);
c2D.fillRect(0, 0, getSize().width, getSize().height);
}
}
}

以上三个类是我包里的。我希望 DDHCircleOne 能够在创建它的实例并调用方法 repaint() 时自行重新绘制它。这样我就可以创建一个扩展 JComponent 的类,然后覆盖 paintComponent(),然后调用 repaint()

如果我有一个用红色重绘的按钮和另一个用蓝色重绘的按钮,当调用 variableName.repaint() 时,圆圈或我在框架中的任何东西都会自行重绘。

doughauf@outlook.com

最佳答案

public void paintComponent(Graphics g) {
super.paintComponent(g);
repaint();
}

切勿在绘画方法中调用 repaint()。这将导致无限循环。

您不需要通用面板。您可以将组件添加到任何面板。

如果你想改变圆圈的颜色,那么你需要改变你的组件的一个属性。例如,您可以只使用 setForeground(...) 方法来更改颜色:

//c2D.setColor(Color.red);
c2D.setColor( getForeground() );

因此,当您点击按钮时,您只需调用 circle.setForeground(Color.RED);

JComponent 的 setForeground() 方法将为您调用组件上的 repaint() 方法。

关于Java-JComponent paintComponent(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19894835/

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