java - 如何在另一个 JPanel 内的 JPanel 上绘制 Graphics2D?

标签 java graphics jpanel graphics2d

我想创建 4 个 JPanel,在每个 JPanel 上绘制一个白色矩形 然后将它们放入一个大 JPanel 中。大 JPanel 位于主框架内。

但是,下面的代码不起作用。请告诉我如何解决这个问题?

import javax.swing.*;
import java.awt.Graphics;

import java.io.*;
import java.net.*;

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Rectangle2D;
import java.io.IOException;

public class Main extends JFrame
{

public void GUI () {
    setBounds(0, 0, 480, 960);
    addWindowListener(new WindowAdapter(){
        public void windowClosing(WindowEvent we){

            System.exit(0);
            }
        });
        setMinimumSize(new Dimension(480, 960));
        setResizable(false);

        JPanel mainPanel = new JPanel();
        GridLayout GL = new GridLayout(4,0);
        mainPanel.setLayout(GL);

    JPanel panel1 = new MyCanvas();
    JPanel panel2 = new MyCanvas();
    JPanel panel3 = new MyCanvas();
    JPanel panel4 = new MyCanvas();

    mainPanel.add(panel1);
    mainPanel.add(panel2);
    mainPanel.add(panel3);
    mainPanel.add(panel4);

    add(mainPanel);

    setVisible(true);
}

public static void main(String args[]) throws IOException
{
    new Main().GUI();
}

class MyCanvas extends JPanel {

    public void drawCanvas(Graphics g) {

        super.paintComponent( g ); // call superclass's paintComponent  

        Graphics2D g2 = ( Graphics2D ) g; // cast g to Graphics2D  

        g2.setColor(Color.WHITE);

        double x = 100;
        double y = 100;
        double width = x + 200;
        double height = y + 50;

        g2.fillRect(50, 50, 380, 200);
    }
    }
}

最佳答案

这是做什么的?:

public void drawCanvas(Graphics g) {
  ....
}

此方法不会覆盖任何 JPanel 绘图方法,因此当 JVM 决定绘制 MyCanvas JPanel 时,通常不会调用该方法。

我认为您应该重写类的 paintComponent(...) 方法,只需将方法重命名为 paintComponent(...) 即可轻松完成该方法>。如果/当您这样做时,请不要忘记使用 @Override 注释来确保您使用正确的签名覆盖该方法。您还需要将该方法的访问说明符更改为 protected,而不是 public

接下来,您需要对您正在创建的那些双变量执行一些操作。

关于java - 如何在另一个 JPanel 内的 JPanel 上绘制 Graphics2D?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12521788/

相关文章:

java - 在xml配置中为没有具体实现的接口(interface)创建spring bean

java - jfreechart 中预期的标识符

Java程序无法找到存储在另一个类中的公共(public)变量

opengl - 应用程序如何支持多个图形 API?

java - 从另一个 Jframe 打开后 JPanel 内容变黑

java - 从过滤器修改 servlet 的 errorPage 的 HTML

java - 无法绘制这个该死的矩形! (java Swing )

graphics - 用于图形应用程序的快速、像素精度 2D 绘图 API?

java - JPanel 内的 JFileChooser;如何让用户选择

java - 从文件设置 JPanel 图像