我正在学习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);
}
}
答案 0 :(得分:2)
您使用的是NewNode
frame.getContentPane().add(new NewNode());
final NewNode newNode = new NewNode();
在您的动作侦听器中,您在newNode上调用了newNode.drawCircle()
,但未添加到内容窗格中。
Circle
类,第一类做了一些奇怪的事情(比如在_circles中添加一个无法访问的新圆圈)?