Eenvoudige Java 2D-graphics: een rechthoek tekenen?

Ik probeer een Java 2D-graphics “hello world” aan de gang te krijgen, en ik vind het vreemd moeilijk (dwz ik ben aan het googelen op variaties van “java hello world example” en kom leeg uit). Kan iemand me helpen met een minimaal hellow world-voorbeeld?

Bewerken

Dit is echter een goed startpunt, “The Java Tutorials: Performing Aangepast schilderij”.


Antwoord 1, autoriteit 100%

Om een rechthoek te tekenen in Swing moet je:

  • Ten eerste, teken nooit rechtstreeks in het JFrame of een ander venster op het hoogste niveau.
  • Teken in plaats daarvan een JPanel, JComponent of een andere klasse die uiteindelijk voortkomt uit JComponent.
  • U moet de methode paintComponent(Graphics g)overschrijven.
  • Je moet er zeker van zijn dat je de supermethode aanroept
  • Je moet je rechthoek tekenen met het Graphics-object dat door de JVM aan de methode is geleverd.
  • Je zou het schilderij in de zelfstudie Swing moeten lezen.

Wissen?

bijv.

import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.*;
public class DrawRect extends JPanel {
   private static final int RECT_X = 20;
   private static final int RECT_Y = RECT_X;
   private static final int RECT_WIDTH = 100;
   private static final int RECT_HEIGHT = RECT_WIDTH;
   @Override
   protected void paintComponent(Graphics g) {
      super.paintComponent(g);
      // draw the rectangle here
      g.drawRect(RECT_X, RECT_Y, RECT_WIDTH, RECT_HEIGHT);
   }
   @Override
   public Dimension getPreferredSize() {
      // so that our GUI is big enough
      return new Dimension(RECT_WIDTH + 2 * RECT_X, RECT_HEIGHT + 2 * RECT_Y);
   }
   // create the GUI explicitly on the Swing event thread
   private static void createAndShowGui() {
      DrawRect mainPanel = new DrawRect();
      JFrame frame = new JFrame("DrawRect");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(mainPanel);
      frame.pack();
      frame.setLocationByPlatform(true);
      frame.setVisible(true);
   }
   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}

Antwoord 2, Autoriteit 30%

U moet een klasse maken die zich uitstrekt van JComponent(of een van zijn subklasse, zoals JPanelin het onderstaande voorbeeld) en overschrijft paintComponent(Graphics g). Hier is een voorbeeld:

class MyPanel extends JPanel {
    private int squareX = 50;
    private int squareY = 50;
    private int squareW = 20;
    private int squareH = 20;
    protected void paintComponent(Graphics g) {
        super.paintComponent(g); // do your superclass's painting routine first, and then paint on top of it.
        g.setColor(Color.RED);
        g.fillRect(squareX,squareY,squareW,squareH);
    }
}

Antwoord 3, Autoriteit 5%

public void paintComponent(Graphics g) {
    Graphics2D g2 = (Graphics2D) g;
    super.paintComponent(g);
    g2.setColor(Color.red);
    g2.drawRect(10, 10, 100, 100);
}

Other episodes