简单的Java 2D图形:绘制一个矩形?

McG*_*gle 3 java swing

我正在尝试让Java 2D图形"hello world"继续进行,并且发现它非常困难(即,我正在使用谷歌搜索"java hello world example"的变体并且空出来).任何人都可以用最小的hellow世界示例来帮助我吗?

编辑

这是一个很好的起点,"Java教程:执行自定义绘画".

Hov*_*els 16

要在Swing中绘制一个矩形,您应该:

  • 首先,永远不要直接在JFrame或其他顶级窗口中绘制.
  • 而是在JPanel,JComponent或最终从JComponent扩展的其他类中绘制.
  • 您应该覆盖该paintComponent(Graphics g)方法.
  • 你应该确保调用super方法
  • 您应该使用JVM提供给方法的Graphics对象绘制矩形.
  • 你应该在Swing教程中阅读这幅画.

明确?

例如,

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();
         }
      });
   }
}
Run Code Online (Sandbox Code Playgroud)


Art*_*are 5

您需要创建一个从JComponent(或其子类之一,例如JPanel下面的示例)扩展并覆盖的类paintComponent(Graphics g)。这是一个例子:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)