如何在另一个JPanel内的JPanel上绘制Graphics2D?
问题描述:
我想创建4个JPanel,在每个 上绘制一个白色矩形,然后将它们放入一个大的JPanel中。大JPanel在主框架内。如何在另一个JPanel内的JPanel上绘制Graphics2D?
但是,下面的代码不起作用。请告诉我,如何解决这个问题?
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
。
接下来,您需要对正在创建的那些双重变量进行一些操作。
非常感谢! –
不客气! –