Я в настоящее время изучаю Java, я понимаю концепции, кроме графики, которая, как программист, является совершенно новой для меня.Откровенно говоря, это сводит меня с ума.Мой пример должен теоретически заставить круг появиться при нажатии кнопки.
Используя методы печати для отладки, я продолжаю находить, что кнопка правильно вызвала все методы и создает новый объект круга 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);
}
}