如何更改Jframe里Jpanel的大小

本文介绍了一个使用Java Swing创建GUI的应用实例。通过Fram类继承JFrame并设置了不可改变大小的窗口,利用BorderLayout布局管理器将窗口分为四个部分,并自定义了vgaPanel和regPanel两个面板类分别填充西侧和东侧区域,最后在底部添加了包含三个按钮的面板。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先贴代码:

package xiya;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

class Fram extends JFrame{
	public Fram(){
		setTitle("Test");
		setSize(800, 600);
		setResizable(false);
		setVisible(true);
		setBackground(Color.WHITE);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		vgaPanel vgaPanel = new vgaPanel();
		add(vgaPanel, BorderLayout.WEST);
		
		regPanel regPanel = new regPanel();
		add(regPanel, BorderLayout.EAST);
		
		JPanel northJPanel = new JPanel();
		northJPanel.setPreferredSize(new Dimension(800, 0));
		add(northJPanel, BorderLayout.NORTH);
		
		JPanel buttonJPanel = new JPanel();
		buttonJPanel.setPreferredSize(new Dimension(800, 40));
		buttonJPanel.add(new JButton("Run"));
		buttonJPanel.add(new JButton("Step"));
		buttonJPanel.add(new JButton("Restart"));
		add(buttonJPanel, BorderLayout.SOUTH);
	}
}

class vgaPanel extends JPanel{
	public vgaPanel() {
		setLayout(null);
		//setSize(400, 600);
		setPreferredSize(new Dimension(640, 300));
		setBackground(Color.RED);
	}
}

class regPanel extends JPanel{
	public regPanel() {
		setLayout(null);
		//setSize(400, 600);
		setPreferredSize(new Dimension(160, 300));
		setBackground(Color.GREEN);
	}
}
public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Fram fram = new Fram();
	}

}


Jframe默认布局为:BorderLayout

Jpanel默认布局为:FlowLayout

默认布局会屏蔽掉我们的设置大小(如setSize)

Jpanel中使用setPreferredSize更改大小,如果想使用自己的布局方式,必须setLayout(null);

### 关于 JFrameJPanel 的使用区别及场景 #### 1. 基本概念 - **JFrame** 是一个顶层容器,代表一个独立的窗口。它通常用于创建 GUI 应用程序的主窗口,并且可以包含其他组件或容器[^1]。 - **JPanel** 是一个轻量级容器,通常被添加到 JFrame 或其他容器中。它用于组织和布局其他组件,如按钮、标签等[^1]。 #### 2. 主要区别 | 特性 | JFrame | JPanel | |--------------------|---------------------------------------|-------------------------------------| | **角色** | 顶层容器,表示独立窗口 | 轻量级容器,用于组织其他组件 | | **默认布局管理器** | BorderLayout | FlowLayout | | **是否可见** | 默认不可见,需要调用 `setVisible(true)` | 默认不可见,依赖父容器设置 | | **关闭操作** | 需要设置关闭操作(如 `EXIT_ON_CLOSE`) | 不涉及关闭操作 | | **内容面板** | 包含内容面板,可以通过 `getContentPane()` 访问 | 本身是一个内容面板 | #### 3. 使用场景 - **JFrame** 适合用于定义整个应用程序的主窗口。例如,在一个简单的计算器应用程序中,JFrame 可以作为整个应用的窗口[^1]。 - **JPanel** 适合用于将界面划分为多个逻辑部分。例如,可以在一个 JFrame 中添加多个 JPanel,每个 JPanel 负责显示不同的信息或功能模块[^1]。 #### 4. 示例代码 以下是一个综合示例,展示了如何结合使用 JFrameJPanel: ```java import javax.swing.*; import java.awt.*; public class JFrameJPanelExample { public static void main(String[] args) { // 创建 JFrame 实例 JFrame frame = new JFrame("JFrame and JPanel Example"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(400, 300); // 创建 JPanel 实例 JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); // 添加组件到 JPanel JButton button = new JButton("Click Me"); JLabel label = new JLabel("Hello, World!"); panel.add(button, BorderLayout.NORTH); panel.add(label, BorderLayout.CENTER); // 将 JPanel 添加到 JFrame frame.getContentPane().add(panel); // 显示窗口 frame.setVisible(true); } } ``` 在此示例中: - `JFrame` 是主窗口,提供了关闭操作和窗口大小设置。 - `JPanel` 用于组织按钮和标签,并通过 `BorderLayout` 管理布局。 #### 5. 注意事项 - 如果重写了 `paint()` 方法,则需要注意不要覆盖默认的绘制逻辑,否则可能导致其他组件无法正常显示[^4]。 - 在多线程环境中,GUI 操作应始终在事件调度线程(Event Dispatch Thread, EDT)中执行[^3]。 #### 6. 总结 JFrameJPanel 各有其特定用途。JFrame 作为顶层容器,负责管理整个窗口的行为;而 JPanel 则作为一个灵活的容器,帮助开发者更好地组织和布局组件。两者结合使用时,可以构建出复杂且功能丰富的用户界面[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

N3verL4nd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值