我是 Java 的新手,因此我正在尝试一些东西。
我正在研究 Java 布局,特别是使用 BorderLayout 的嵌套面板。
我遇到的问题是我无法绘制到嵌套面板。我可以在主面板上绘图,但不能在其中嵌套的面板上绘图。
如果您能告诉我哪里出错了,我将不胜感激。
这是我的主要代码:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class GUI extends JFrame{
public GUI()
{
setSize(600,600);
这是主面板。
JPanel pan1 = new JPanel();
pan1.setLayout(new BorderLayout());
pan1.setPreferredSize(new Dimension(200,200));
JLabel label = new JLabel("Panel 1");
pan1.add(label);
然后我创建了两个嵌套面板,并将其添加到主面板中。
JPanel pan2 = new JPanel();
pan2.setBackground(Color.YELLOW);
pan2.setPreferredSize(new Dimension(200,200));
JPanel pan3 = new JPanel();
pan3.setBackground(Color.YELLOW);
pan3.setPreferredSize(new Dimension(200,200));
这里是我调用在屏幕上绘制形状的类的地方。
draw drawingShape = new draw();
这是我无法将形状绘制到嵌套面板的问题。
pan2.add(drawingShape);
但是我可以将它绘制到这个主要的面板上。
pan1.add(drawingShape);
我将两个面板插入到主面板中。 pan1.add(pan2, BorderLayout.NORTH); pan1.add(pan3, BorderLayout.SOUTH);
getContentPane().add(pan1);
setVisible(true);
}
public static void main(String args[])
{
new GUI();
}
}
下面是创建形状的代码,非常完美:
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
public class draw extends JPanel{
public void paint(Graphics g) {
Image img = createImage();
g.drawImage(img, 20,20,this);
}
private Image createImage(){
BufferedImage bufferedImage = new BufferedImage(200,200,BufferedImage.TYPE_INT_RGB);
Graphics g = bufferedImage.getGraphics();
return bufferedImage;
}
}
代码确实可以编译,感谢任何帮助。
问候
最佳答案
自定义绘画是通过覆盖 paintComponent()
方法而不是 paint() 方法来完成的。另外,不要忘记调用 super.paintComponent()。
阅读 Custom Painting 上的 Swing 教程部分获取更多信息和示例。
Here is the code for creating the shape which is completley fine:
我不明白它怎么能好。据我所知,它什么也没做。首先不要在 paintComponent() 方法中创建图像。只要 Swing 确定需要重新绘制组件,就会调用此方法。其次,代码所做的只是创建一个空白图像。
如果仍有问题,请阅读教程并发布实际的 SSCCE
。
关于java - 使用 BorderLayout 绘制到嵌套面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16180544/