gpt4 book ai didi

java - 简单的 Java 按钮显示一个圆圈

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:36:18 24 4
gpt4 key购买 nike

我目前正在学习 java,我理解除了图形之外的概念,作为程序员,图形对我来说是全新的。坦率地说,它让我走投无路。理论上,我的示例应该在按下按钮时显示一个圆圈。

使用打印方法进行调试我一直发现 Button 正确调用了所有方法并创建了一个新的 circle c 对象,但是在 newNode().drawCircle() 中从未调用过 repaint(),因此未绘制新对象。这是为什么,有人可以帮我让这个该死的圈子出现吗!!有些人可能会注意到我使用这个示例来尝试帮助解决问题 http://leepoint.net/notes-java/examples/graphics/circles/circles.html .

这本来是网络绘图程序的开始,我认为它很容易......除了在创建时显示节点......即圆圈!

这段代码现在可以工作了,所以我希望它能帮助遇到类似问题的人,因为我知道这是一个常见的 java 作业:)

import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
///////////////////////////////////////////////////////////////////////
public class NetGrapher
{

public static void main(String[] args){
final JFrame frame = new JFrame ("NetGrapher");
frame.getContentPane().add(new NewNode()); /////delete line
final NewNode newNode = new NewNode();
///// Revision after answer, add, frame.getContentPane().add(newNode); (erase the above frame.getContent)


JPanel buttonPanel = new JPanel();
JButton button = new JButton ("New Node");
button.addActionListener(new ActionListener( ){
public void actionPerformed( ActionEvent e) {
System.out.println( "Button Pressed");
newNode.drawCircle();
}
});

buttonPanel.add(button);
frame.add(buttonPanel, BorderLayout.SOUTH);

frame.setSize(600,600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}

}
//////////////////////////////////////////////////////////////////////
class NewNode extends JComponent
{

public ArrayList<Circle> _circles = new ArrayList<Circle>();

public void paintComponent(Graphics g){
g.setColor(Color.WHITE);
g.fillRect(0, 0, 600, 600);

System.out.println( "RePaint");
for ( Circle c : _circles){
System.out.println( "Each C");
g.setColor(Color.BLACK);
c.draw(g);
}
}

public void drawCircle(){

System.out.println( "drawCircle Implemented");
Circle c = new Circle(100, 100, 100, 100);
_circles.add(c);
repaint();
}

}

/////////////////////////////////////////////////////////////////////
class Circle
{
int x, y, z, a;

Circle (int _x, int _y, int _z, int _a){
this.x = _x;
this.y = _y;
this.z = _z;
this.a = _a;
}

public void draw(Graphics g){

System.out.println( "Called In Draw Method");
g.setColor(Color.BLACK);
g.fillOval(x, y, z, a);
}

}

最佳答案

您正在使用 NewNode 的两个不同实例

frame.getContentPane().add(new NewNode());
final NewNode newNode = new NewNode();

在您的 Action 监听器中,您在未添加到内容 Pane 的新节点上调用 newNode.drawCircle()

顺便说一句,你有没有注意到你有两个 Circle 类,其中第一个做了一些奇怪的事情(比如在它无法访问的 _circles 中添加一个新的圆)?

关于java - 简单的 Java 按钮显示一个圆圈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7454677/

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