如何在另一个JPanel内部的JPanel上绘制Graphics2D



我想创建 4 个 JPanels,在每个 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

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

相关内容

  • 没有找到相关文章

最新更新