当前位置: 首页 > 知识库问答 >
问题:

使用BorderLayout绘制嵌套面板

明宜年
2023-03-14

我对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);

我将两个面板插入主面板。潘1。添加(pan2,BorderLayout.NORTH);潘1。添加(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;
  }

}

代码确实可以编译,非常感谢您的帮助。

当做

共有1个答案

韦熙云
2023-03-14

自定义绘制是通过覆盖paintComponent()方法而不是paint()方法来完成的。另外,不要忘记调用super。paintComponent()。

有关更多信息和示例,请阅读Swing自定义绘画教程中的部分。

以下是创建完全精细形状的代码:

我不知道怎么会好。据我所知,它没有任何作用。首先,不要在paintComponent()方法中创建图像。每当Swing确定组件需要重新绘制时,就会调用此方法。其次,代码所做的就是创建一个空白图像。

如果您仍然有问题,请阅读本教程并发布实际的SSCCE。

 类似资料:
  • 问题内容: 我有一个主JPanel,它实现Scrollable并使用BorderLayout。它包含一个NORTH只读JEditorPane,一个带有FlowLayout的CENTER JPanel(可动态添加JButton)和一个SOUTH JLabel(均按该顺序添加)。当将许多JButton添加到CENTER JPanel时,这些按钮将缠绕到下一行:问题是CENTER JPanel占用的垂直

  • 我被困在将嵌套JS与宇宙数据库核心SQL API集成上。我知道有一个用于 Cosmos DB 的模块(https://github.com/nestjs/azure-database),但我需要数据架构来支持嵌套的 json,如下所示: 我认为@nestjs/azure-database不支持这一点(或者我可能错了),因为当我检查他们的示例和quickstart时,没有这样的json模式的示例。

  • 问题内容: 我正在编写一个具有许多不同视图的程序。其中之一是图形密集型(显示互连的图形)。其他人只显示较小但复杂的图表。 我发现主视图的绘制时间很长(甚至只是绘制当前可见的区域),并且在绘制时,界面的其余部分变得很慢。 我的问题是,我可以创建一个新线程来处理绘画吗?如果是这样,是否会导致性能提高,我怀疑它不会。我尝试了以下方法: 创建一个抽象类ThreadPaintablePanel,我的复杂视图

  • 我在想哪里出了问题。我以前做过这个,但由于某种原因,这次我不能让它工作。 我用Netbeans设计了这个项目。最相关的部分是initTiras方法,它被认为可以绘制一些东西,但它没有。我包含了NetBeans生成的代码。 这是代码的最简化版本,但它仍然没有绘制任何内容。 所以我在项目中创建了一个新的框架。然后我把一个JPanel放进去(在设计模式下)。JPanel称为ElPanel和JFrame

  • 绘制面        点击菜单栏或底下快捷工具栏中的“绘制面”按钮,按照弹出对话框进行线的绘制。        双击完成面的绘制后弹出属性信息对话框,可以在“说明”栏中查看并修改对于该面的说明。        在“空间信息”栏修改面的节点坐标,也可以直接在三维球上选中面上的节点移动设置。        在“样式”栏,选中自定义面样式进行修改面的填充颜色、不透明度、纹理贴图以及显示轮廓线的风格等样式

  • 绘制面        点击菜单栏或底下快捷工具栏中的“绘制面”按钮,按照弹出对话框进行线的绘制。        双击完成面的绘制后弹出属性信息对话框,可以在“说明”栏中查看并修改对于该面的说明。        在“空间信息”栏修改面的节点坐标,也可以直接在三维球上选中面上的节点移动设置。        在“样式”栏,选中自定义面样式进行修改面的填充颜色、不透明度、纹理贴图以及显示轮廓线的风格等样式