2011-09-17 10 views
3

私は現在Javaを学んでいますが、私はプログラマーとしてはまったく新しいですグラフィック以外の概念を理解しています。まさに率直に言って私は曲がりくねっている。私の例では、理論的にボタンを押すだけでサークルが表示されるはずです。サークルを表示するための単純なJavaボタン

デバッグのための印刷メソッドの使用Buttonはすべてのメソッドを正しく呼び出し、新しいcircle cオブジェクトを作成しますが、newNode()。drawCircle()は呼び出されないため、 。これはなぜですか、誰かが私にこのダンサーサークルを表示させる助けになることができます!問題を解決するためにこの例を使用することに気付いた人もいます。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); 
} 

} 

答えて

2

あなたはNewNode

frame.getContentPane().add(new NewNode()); 
final NewNode newNode = new NewNode(); 
の2つの異なるインスタンスを使用している作品

アクションリスナーでは、内容ペインに追加されていないnewNodeでnewNode.drawCircle()を呼び出しています。

ところで、あなたは2つのCircleクラスを持っていることに気が付いたことがあります。最初に奇妙なことが起こります(_circlesに新しいサークルを追加するなど)。

+0

乾杯!一週間中私を悩ませている、私は単純な最初の数行を逃したとは信じられない。 –

+0

opppsは私の悪いですが、それを修正するためのいくつかの試行のために悪いコピーと貼り付けされている必要があります!、混乱については、残念ながら編集されて:)。 –

関連する問題