York wrote:
Hi everybody,
i'm new to Java 2D and I have a Problem drawing a geometric primitive
on a JPanel.
I used getGraphics() to get the Graphics-Object of my JPanel, casted
it to Graphics2D, then drew a line on it und used myJPanel.repaint()
to update the JPanel.
But somehow I can't see the line I'v drawn and i can't figure it out
why .
the following is my code (without import statements):
.......................................................................................................
public class NewJFrame extends JFrame {
private JPanel pane = null;
/** Creates new instance */
public NewJFrame() {
initComponents();
// draw a line on JPanel
Graphics2D canvas = (Graphics2D)pane.getGraphics();
canvas.setPaint(Color.BLUE);
canvas.draw(new Line2D.Float(1,1,111,111));
pane.repaint();
}
private void initComponents() {
Dimension min = new Dimension(300,300);
setMinimumSize(min);
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
pane = new JPanel();
setContentPane(pane);
pane.setBackground(new Color(255, 204, 255));
pane.setForeground(new Color(51, 51, 255));
pack();
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new NewJFrame().setVisible(true);
}
});
}
}
.......................................................................................................
Any help would be greatly appreicated, because I am deeply confused
and frustrated.
Repaint tells the panel to call the paint method, which will generally
erase everything you've painted on useing getGraphics().
The appropriate way to draw graphics is to create your own JComponent
subclass which override void paintComponent(Graphics g), and in that
method use the graphics object thats passed in.
Generally, you can cast Graphics2d g2d = (Graphics2d)g; and use the
newer Java 2d API.