Java 如何动态改变改变组件大小(更随窗口) 和 根据窗口大小改变程序窗口大小f

Posted 轩辕泪1020

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 如何动态改变改变组件大小(更随窗口) 和 根据窗口大小改变程序窗口大小f相关的知识,希望对你有一定的参考价值。

1. Java 如何动态改变改变组件大小(跟随窗口)

(1)根据event消息进行动态改变,但是大神们说这样效率不高。

(2)根据窗口布局进行动态改变。下面有一个很好的例子,在一个论坛上看到的。具体在哪,记不得了。

下面是程序显示窗口:


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

public class BorderLayoutTest

	public static void main(String[] args)
	
		JFrame frame = new JFrame("xxx");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLocation(400, 200);

		frame.setLayout(new BorderLayout());

		JPanel left = new JPanel();
		left.setPreferredSize(new Dimension(300, 320));
		JPanel right = new JPanel();
		right.setPreferredSize(new Dimension(200, 320));

		left.setLayout(new BorderLayout());
		JPanel left_1 = new JPanel();
		left_1.setPreferredSize(new Dimension(300, 300));
		left_1.setBackground(Color.RED);

		JPanel left_2 = new JPanel();
		left_2.setPreferredSize(new Dimension(300, 100));
		left_2.setBackground(Color.GREEN);

		left.add(left_1, BorderLayout.CENTER);
		left.add(left_2, BorderLayout.SOUTH);

		right.setLayout(new BorderLayout());
		JPanel right_1 = new JPanel();
		right_1.setBackground(Color.WHITE);
		right_1.setPreferredSize(new Dimension(200, 100));

		JPanel right_2 = new JPanel();
		right_2.setBackground(Color.BLUE);
		right_2.setPreferredSize(new Dimension(200, 100));

		JPanel right_3 = new JPanel();
		right_3.setBackground(Color.BLACK);
		right_3.setPreferredSize(new Dimension(200, 120));

		right.add(right_1, BorderLayout.NORTH);
		right.add(right_2, BorderLayout.CENTER);
		right.add(right_3, BorderLayout.SOUTH);

		frame.add(left, BorderLayout.CENTER);
		frame.add(right, BorderLayout.EAST);

		frame.setVisible(true);
		frame.pack();
	

本人感受:

(1)如果想让组件都填充满自己的容器(如panel,frame),使用上面的例子比较好。并且其可以随你的容器大小来改变大小,如果你使用消息进行响应的话,就比较麻烦,并且效率低(就是卡屏)。在这里面所用的组件都是用setPreferSize来进行大小的设置,其实这里的设置并不是其最终的结果,这得取决于所有的组件包括容器大小的影响。布局真是个好东西啊。强大强大!!但是菜鸟就是搞不懂啊,难道我开始升级了??

(2)有些人(就是菜鸟我)总想用一个控件填充一个panel,并且随panel大小进行调整控件的大小。其实这时使用布局就对了。首先对你的容器(如panel)设定一个布局:

this.setLayout(new BorderLayout());
然后添加你的唯一组件:

this.add(splitPane, BorderLayout.CENTER);
这样就完成了,好强大有没有!!!!好吧,也许是自己太菜了,唉JAVA的基础知识不好啊。


2. 根据实际屏幕大小更改自己窗口的大小。有一个记事本的小程序。

代码出处:点击打开链接

http://blog.csdn.net/zollty/article/details/6852380


import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class Calculator extends JFrame

	public Calculator()
	
		super("无标题 - 记事本");
		JMenuBar menuBar = new JMenuBar();

		JMenu fileMenu = new JMenu("文件");
		JMenu editMenu = new JMenu("编辑");
		JMenu formatMenu = new JMenu("格式");
		JMenu checkMenu = new JMenu("查看");
		JMenu helpMenu = new JMenu("帮助");

		menuBar.add(fileMenu);
		menuBar.add(editMenu);
		menuBar.add(formatMenu);
		menuBar.add(checkMenu);
		menuBar.add(helpMenu);

		JScrollPane scrollPane = new JScrollPane();
		scrollPane
				.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
		scrollPane
				.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);

		JTextArea textArea = new JTextArea();
		scrollPane.setViewportView(textArea);

		this.getContentPane().add(scrollPane);

		this.setJMenuBar(menuBar);
		this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

		//用来设置窗口随屏幕大小改变
		sizeWindowOnScreen(this, 0.6, 0.6);
		this.setVisible(true);
	

	/**
	* 
	* @param calculator
	* @param widthRate 宽度比例 
	* @param heightRate 高度比例
	*/
	private void sizeWindowOnScreen(Calculator calculator, double widthRate,
			double heightRate)
	
		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

		calculator.setSize(new Dimension((int) (screenSize.width * widthRate),
				(int) (screenSize.height * heightRate)));
	

	public static void main(String[] args)
	
		Calculator calculator = new Calculator();
	





以上是关于Java 如何动态改变改变组件大小(更随窗口) 和 根据窗口大小改变程序窗口大小f的主要内容,如果未能解决你的问题,请参考以下文章

调整窗口大小时,ng-class 动态不会改变

PB 怎么动态(用代码)改变数据窗口的属性(例如窗体的字体大小,字体颜色,背景颜色)

delphi实现窗体组建随窗体大小改变而改变

MFC如何改变窗口大小??

.net中如何动态改变Label控件的位置

如何实现让平铺的背景图片随着浏览器窗口的大小改变而改变?