Java 如何动态改变改变组件大小(更随窗口) 和 根据窗口大小改变程序窗口大小f
如果想让组件都填充满自己的容器(如panel,frame),使用上面的例子比较好。并且其可以随你的容器大小来改变大小,如果你使用消息进行响应的话,就比较麻烦,并且效率低(就是卡屏)。在这里面所用的组件都是用setPreferSize来进行大小的设置,其实这里的设置并不是其最终的结果,这得取决于所有的组件包括容器大小的影响。布局真是个好东西啊。强大强大!!
·
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();
}
}
更多推荐
已为社区贡献1条内容
所有评论(0)