java - 使用 BorderLayout 绘制到嵌套面板

标签 java swing layout graphics drawing

我是 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/

相关文章:

java - Intellij 调试器跨过 hibernate 对象值是空的

java - 尝试使用 jtable 更新 mysql 表中的数据

java - JPanel 转换,我的代码有什么问题?

Android:切换到 ListActivity 时无法设置 ContentView

java - 存储键值对的最佳 Java 数据结构

Java PATH 问题(适用于 java 安装目录,但不适用于其他任何地方)

asp.net - 在 Web 表单上排列动态创建的控件

android - 如何在android studio中设置约束

java - java随机字符

java - JPanel闪烁