zoukankan      html  css  js  c++  java
  • 根据桌面大小调整窗体大小

    窗体与桌面的大小比例是软件运行时用户经常会注意到的一个问题。例如,在1024×768的桌面上,如果放置一个很大(如1280×1024)或者很小(如10×10)的正方形窗体,会显得非常不协调,正是基于以上这种情况,所以大部分软件的窗体界面都是根据桌面的大小进行自动调整的,本实例就实现这样的功能。实例运行效果如图

    本实例实现的重点是如何获取桌面的大小,而获取桌面大小时,主要用到窗体的工具包Toolkit类,下面对本实例中用到的关键技术进行详细介绍。

    获取窗体工具包

    每个窗体类都提供了getToolkit()方法来获取窗体的工具包对象。在窗体内部已经封装了这个工具包,随时可以获取。该方法的声明如下:

    public Toolkit getToolkit()

    获取桌面屏幕大小

    窗体的工具包提供了方法来获取当前屏幕的大小,该方法的声明如下:

    public abstract Dimension getScreenSize()  throws HeadlessException

    1)在项目中创建窗体类SetFormSizeByDeskSize。

    2)编写窗体的打开事件处理方法,该方法在窗体打开时被执行,在方法中,首先获取窗体工具包对象,然后通过工具包对象的getScreenSize()方法获取屏幕的大小,最后把窗体设置为屏幕大小的80%。代码如下:

    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.EventQueue;
    import java.awt.GraphicsEnvironment;
    import java.awt.Toolkit;
    
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.border.EmptyBorder;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    
    public class SetFormSizeByDeskSize extends JFrame {
        
        private JPanel contentPane;
        
        /**
         * Launch the application.
         */
        public static void main(String[] args) {
            EventQueue.invokeLater(new Runnable() {
                public void run() {
                    try {
                        SetFormSizeByDeskSize frame = new SetFormSizeByDeskSize();
                        frame.setVisible(true);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        }
        
        /**
         * Create the frame.
         */
        public SetFormSizeByDeskSize() {
            addWindowListener(new WindowAdapter() {
                @Override
                public void windowOpened(WindowEvent e) {
                    do_this_windowOpened(e);
                }
            });
            setTitle("u6839u636Eu684Cu9762u5927u5C0Fu8C03u6574u7A97u4F53u5927u5C0F");
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setBounds(100, 100, 450, 300);
            contentPane = new JPanel();
            contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
            contentPane.setLayout(new BorderLayout(0, 0));
            setContentPane(contentPane);
        }
        
        protected void do_this_windowOpened(WindowEvent e) {
            Toolkit toolkit = getToolkit();// 获得窗体工具包
            Dimension screenSize = toolkit.getScreenSize();// 获取屏幕大小
            int width = (int) (screenSize.width * 0.8);// 计算窗体新宽度
            int height = (int) (screenSize.height * 0.8);// 计算窗体新宽度
            setSize(width, height);// 设置窗体大小
        }
    }

    心法领悟:有效使用窗体的事件监听器。

    窗体事件监听器是对窗体一些列活动的事件处理。其中包括窗体打开、关闭、激活、最小化等动作的事件处理方法,这些事件一般用来实现默认资源、数据的初始化与销毁等功能。

  • 相关阅读:
    Talk the Talk
    2.1 使用eclipse4.4 搭建 maven简单结构项目。
    [LeetCode] Best Time to Buy and Sell Stock
    hdu4605Magic Ball Game 树状数组
    phoenixframe自己主动化平台在Linux环境下运行用例的说明
    数据存储值归档Archive
    BZOJ 1040 ZJOI2008 骑士 树形DP
    HDOJ 5357 Easy Sequence DP
    Autodesk 招聘Revit二次开发咨询顾问,与Autodesk全球团队紧密合作,提高职业生涯的好机会
    Codeforces Round #263 (Div. 1) A B C
  • 原文地址:https://www.cnblogs.com/mrxy/p/6767227.html
Copyright © 2011-2022 走看看