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();
	}
}




Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐