java swing 窗口和控件自适应大小

本文记录java开发CS结构时怎么自适应屏幕大小以及控件跟随frame大小变化大小、位置和字体大小

需要注意:

1、代码必须放置在其构造方法中。如:我的frame1是我frame.java的名,则代码放置在方法“public Frame1() ”中。

2、放在控件初始化后的地方。

frame.java中Frame1() 方法中的代码:

//自动化页面大小--全屏
		int fraWidth = this.getWidth();//frame的宽
		int fraHeight = this.getHeight();//frame的高
		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
		int screenWidth = screenSize.width;
		int screenHeight = screenSize.height;
		this.setSize(screenWidth, screenHeight);
		this.setLocation(0, 0);
		float proportionW = screenWidth/fraWidth;
		float proportionH = screenHeight/fraHeight;
		
		FrameShow.modifyComponentSize(this, proportionW,proportionH);
		this.toFront();

FrameShow.java中的modifyComponentSize(JFrame frame,float proportionW,float proportionH)方法


/**
	 * frame中的控件自适应frame大小:改变大小位置和字体
	 * @param frame 要控制的窗体
	 * @param proportion 当前和原始的比例
	 */
	public static void modifyComponentSize(JFrame frame,float proportionW,float proportionH){
		
		try 
		{
			Component[] components = frame.getRootPane().getContentPane().getComponents();
			for(Component co:components)
			{
//				String a = co.getClass().getName();//获取类型名称
//				if(a.equals("javax.swing.JLabel"))
//				{
//				}
				float locX = co.getX() * proportionW;
				float locY = co.getY() * proportionH;
				float width = co.getWidth() * proportionW;
				float height = co.getHeight() * proportionH;
				co.setLocation((int)locX, (int)locY);
				co.setSize((int)width, (int)height);
				int size = (int)(co.getFont().getSize() * proportionH);
				Font font = new Font(co.getFont().getFontName(), co.getFont().getStyle(), size);
				co.setFont(font);
			}
		} 
		catch (Exception e) 
		{
			// TODO: handle exception
		}
	}



  • 14
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
当然可以!以下是修改后的代码,它将使控件大小自适应窗口大小: ```java import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class FunctionSelectionFrame extends JFrame { public FunctionSelectionFrame() { setTitle("功能选择界面"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); // 创建按钮 JButton btnFunction1 = new JButton("功能1"); JButton btnFunction2 = new JButton("功能2"); JButton btnFunction3 = new JButton("功能3"); // 设置按钮点击事件 btnFunction1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 功能1的逻辑处理 JOptionPane.showMessageDialog(null, "你点击了功能1"); } }); btnFunction2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 功能2的逻辑处理 JOptionPane.showMessageDialog(null, "你点击了功能2"); } }); btnFunction3.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 功能3的逻辑处理 JOptionPane.showMessageDialog(null, "你点击了功能3"); } }); // 设置布局和添加按钮 setLayout(new GridLayout(3, 1)); add(btnFunction1); add(btnFunction2); add(btnFunction3); pack(); // 自适应窗口大小 setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new FunctionSelectionFrame(); } }); } } ``` 在这个修改后的代码中,我使用了`GridLayout`布局管理器,在窗口上创建了一个3行1列的网格布局,并将按钮添加到每个网格中。然后使用`pack()`方法来自适应窗口大小,这样控件大小就会随着窗口大小的改变而自动调整。最后,通过调用`setVisible(true)`来显示窗口。你可以根据自己的需求修改和扩展代码。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值