Day45--panel面板

Day45--panel面板

涉及到的英语单词:

panel 面板

component 组件

​ 组件是构成图形用户界面的基本元素。例如按钮(JButton)、文本框(JTextField)、标签(JLabel)等都是 Swing(Java 的一个 GUI 工具包)中的组件。

container 容器

​ 容器(Container)是一种特殊的组件,它可以包含其他组件。容器为其所包含的组件提供了布局管理的功能,决定了这些组件在容器中的位置和大小排列方式。例如,常见的容器有JFrame(窗口)、JPanel(面板)等。

Frame 窗口

  • 在 Java GUI 编程中,Framejava.awt.Frame)是一个顶层容器。它是一个带有标题栏和边框的窗口,可以包含其他 GUI 组件,如按钮、文本框、面板等组件。
  • 面板不能单独存在,需要放在frame里面

示例:

创建TestPanel.java

​ 在TestPanel里面,创建main方法,创建Frame、Panel的对象。

​ Frame不使用默认的布局管理器

​ 设置frame的坐标、颜色

​ 设置panel的坐标、颜色

​ frame中添加panel

​ 可见

​ 这里有一个有意思的地方:这里运用到了流布局

image-20241212144750332

package com.liu.gui.lesson1;

import java.awt.*;

public class TestPanel {
    public static void main(String[] args) {
        Frame frame = new Frame();
        Panel panel = new Panel();

        //设置布局
        frame.setLayout(null);

        //坐标、颜色
        frame.setBounds(300,300,500,500);
        frame.setBackground(new Color(36, 179, 43));

        //panel设置----位置要注意,panel是放在frame里面的
        panel.setBounds(50,50,400,400);
        panel.setBackground(new Color(166, 82, 30));

        //frame中添加panel
        //frame.add()
        //这里有一个很有意思的事情:查看源代码可知,panel是container的子类,container是component的子类
        //frame.add(component),panel也可以放在里面
        frame.add(panel);

        frame.setVisible(true);
    }
}


image-20241212150257438

代码详细解释:

frame.setLayout(null);啥意思:

  1. 布局管理器概述
    • 在Java的图形用户界面(GUI)编程中,布局管理器(Layout Manager)用于控制容器(如FramePanel等)中组件的大小和位置。不同的布局管理器有不同的布局策略,例如FlowLayout会按照从左到右、从上到下的顺序排列组件;BorderLayout将容器分为北、南、东、西、中五个区域来放置组件等。
  2. setLayout(null)的含义
    • 当在Frame(或其他容器)上调用setLayout(null)时,这意味着你将取消该容器的默认布局管理器。
    • 在你的代码中,frame.setLayout(null);表示Frame不再使用默认的布局管理器。
    • 取消默认布局管理器后,你就可以通过setBounds方法手动设置组件的位置和大小。例如,在你的代码中,后续使用了frame.setBounds(300,300,500,500);来设置Frame的位置和大小,使用panel.setBounds(50,50,400,400);来设置PanelFrame中的位置和大小。
    • 如果不调用setLayout(null),直接使用setBounds可能不会达到预期效果,因为默认布局管理器会按照它自己的规则来管理组件的位置和大小,可能会覆盖你手动设置的位置和大小。

总的来说,frame.setLayout(null);是为了让程序员能够完全手动地控制Frame内组件的布局。

panel的坐标是以整个电脑屏幕为坐标系,还是以所处的窗口为坐标系?

解答:1. 坐标系说明

  • 在Java AWT(Abstract Window Toolkit)中,当你设置Panel的坐标时,坐标系统是以它所在的容器(Frame)为基准的,而不是以整个电脑屏幕。
  1. 代码示例中的体现
    • 在你的代码中,panel.setBounds(50,50,400,400);这个操作是将Panel放置在Frame内部。这里的(50, 50)坐标是相对于Frame左上角的位置。也就是说,Panel的左上角将位于Frame左上角向右50像素、向下50像素的位置。
    • 这个规则适用于大多数AWT和Swing(Swing是在AWT基础上构建的更高级的GUI库)组件。它们的位置和大小都是在其直接父容器的坐标系中进行定义的。这样可以方便地在容器内部对组件进行布局,而不用考虑屏幕的绝对位置等因素。
posted @ 2024-12-12 15:07  1hahahahahahahaha  阅读(33)  评论(0)    收藏  举报