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

时间:2011-09-17 12:19:20

标签: java graphics draw jbutton geometry

我正在学习java,我理解除了Graphics之外的概念,作为程序员对我来说是全新的。坦率地说,它正在推动我的弯道。我的例子理论上应该在按下按钮时出现一个圆圈。

使用print方法进行调试我一直发现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);
}

}

1 个答案:

答案 0 :(得分:2)

您使用的是NewNode

的两个不同实例
frame.getContentPane().add(new NewNode());
final NewNode newNode = new NewNode();

在您的动作侦听器中,您在newNode上调用了newNode.drawCircle(),但未添加到内容窗格中。

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