如何使窗体自适应分辨率java swing

来源:互联网 发布:windows壁纸高清 编辑:程序博客网 时间:2024/05/17 09:06

from:http://wenda.tianya.cn/wenda/thread?tid=29ce007bd6e974ee&from=bottomThread


总共两个文件,第一个是启动文件,第二个是一个基础面板类,可以运行。已经帮你排好版面了,只是未有添加事件响应,你研究一下自己添加吧



package com;

import com.ren.BasePanel;
import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.Toolkit;

public class SwingTest extends JFrame {
   public static void main(String args[]) {
       new SwingTest();
   }

   public SwingTest() {
       super("SwingTextField 测试");
       init();
       setup();
       this.setSize(800, 300);
       this.setVisible(true);
       this.setLocation
               ( //定位框架位置
                       (int) (Toolkit.getDefaultToolkit().getScreenSize().
                              getWidth() - 400) / 2,
                       (int) (Toolkit.getDefaultToolkit().getScreenSize().
                              getHeight() - 300) / 2
               );
       this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   }

   BasePanel leftPanel;
   BasePanel rightPanel;
   JTextField country = new JTextField(16);
   JButton search = new JButton("SEARCH");
   JTextField latitude = new JTextField(40);
   JTextField currentTime = new JTextField(40);
   JTextField wind = new JTextField(40);
   JTextField visibilityField = new JTextField(40);
   JTextField skycondition = new JTextField(40);
   JTextField dewpoint = new JTextField(40);
   JTextField relativehumidity = new JTextField(40);
   JTextField presure = new JTextField(40);

   public void init() {
       leftPanel = new BasePanel() {
           public void initAllComponents() {
           }

           public void layoutAllComponents() {
               addComponent(country, 0, 0, 1, 1, 10, 10);
               addComponent(search, 1, 0, 1, 1, 10, 10);
           }
       };

       rightPanel = new BasePanel() {
           public void initAllComponents() {
           }

           public void layoutAllComponents() {
               addComponent(latitude, 0, 0, 1, 1, 10, 10);
               addComponent(currentTime, 1, 0, 1, 1, 10, 10);
               addComponent(wind, 2, 0, 1, 1, 10, 10);
               addComponent(visibilityField, 3, 0, 1, 1, 10, 10);
               addComponent(skycondition, 4, 0, 1, 1, 10, 10);
               addComponent(dewpoint, 5, 0, 1, 1, 10, 10);
               addComponent(relativehumidity, 6, 0, 1, 1, 10, 10);
               addComponent(presure, 7, 0, 1, 1, 10, 10);
           }
       };
   }

   public void setup() {
       this.setLayout(new BorderLayout());
       this.add(leftPanel, BorderLayout.WEST);
       this.add(rightPanel, BorderLayout.EAST);
   }
}

以下是我以前的经验总结,比较有用的一个类,你可以好好研究一下
/**<p>
* =============================================================================
* <p>Copyright (c) 2008, Ren Java Studio
* <p>All rights reserved.<p>
* =============================================================================
* <p>文件名称:BasePanel.java
* <p>文件标识:见配置管理计划书
* <p>摘    要:抽象基础面板
* @version 2.0
* @author Ren
* <p>完成日期:2008年5月5日.<p>
=============================================================================*/
package com.ren;

import java.awt.*;
import javax.swing.*;

public abstract class BasePanel extends JPanel {
   /*当前面板的容器*/
   protected Container container;
   /*网格布局器*/
   protected GridBagLayout layout;
   /*网格布局器的约束器*/
   protected GridBagConstraints constraints;

   public BasePanel() {
       container = this;
       layout = new GridBagLayout();
       constraints = new GridBagConstraints();
       container.setLayout(layout);
       constraints.fill = constraints.BOTH; //在水平方向和垂直方向上同时调整组件大小
       initAllComponents();
       layoutAllComponents();
   }

   /**<p>
    * =========================================================================
    * <p>初始化所有GUI组件.<p>
    =========================================================================*/
   protected abstract void initAllComponents();

   /**@todo 继承之子类完成所有组件的初始化工作 */

   /**<p>
    * =========================================================================
    * <p>布局所有已经初始化了的GUI组件
    *<p><blockquote><pre>
    *   布局器,约束器必须已经初始化好
    *   然后再调用布局子函数进行网格布局
    *</pre></blockquote></p>
    =========================================================================*/
   protected abstract void layoutAllComponents();

   /**@todo 继承之子类完成组件具体的布局 */

   /**<p>
    * =========================================================================
    * <p> 工具函数:用于获取当前屏幕的分辨率
    * @return Dimension 屏幕大小<p>
    =========================================================================*/
   public Dimension getScreenSize() {
       return Toolkit.getDefaultToolkit().getScreenSize();
   }

   /**<p>
    * ==========================================================================
    * <p> 设置将本程序框架大小并将其定位于屏幕正中心
    * @param container Container 要设置的容器
    * @param width 本框架的宽度
    * @param height 本框架的高度<p>
    ==========================================================================*/
   protected void putToCenter(Component container, int width, int height) {
       container.setSize(width, height); //设置大小
       container.setLocation
               ( //定位框架位置
                       (int) (Toolkit.getDefaultToolkit().getScreenSize().
                              getWidth() - width) / 2,
                       (int) (Toolkit.getDefaultToolkit().getScreenSize().
                              getHeight() - height) / 2
               );
   }

   /**<p>
    * =========================================================================
    * <P> 获取整个桌面的大小
    * @return Rectangle 桌面大小.<p>
    ==========================================================================*/
   public java.awt.Rectangle getDesktopBounds() {
       GraphicsEnvironment env =
               GraphicsEnvironment.getLocalGraphicsEnvironment();
       return env.getMaximumWindowBounds();
   }

   /**<p>
    * =========================================================================
    * <p> 设置将本程序框架大小并将其定位于屏幕(X,Y)坐标处宽和高为 width, height
    * @param container Container 要设置的容器
    * @param width int  宽度
    * @param height int 高度
    * @param startX int 放置位置的X坐标
    * @param startY int 放置位置的Y坐标<p>
    =========================================================================*/
   protected void putToPlace(Container container, int width, int height,
                             int startX, int startY
           ) {
       container.setLocation(startX, startY);
       container.setSize(width, height); //设置大小
   }

   /**<p>
    * =========================================================================
    * <p> 功能强大的工具函数:布局器
    * <p> 具体功能:
    * <p> 将 componentToAdd 组件安装到 container 容器中的
    * <p> 第 row 行, 第 column 列,并在 container 容器中
    * <p> 占据 height 行,width 列, 在X,Y方向分别可伸展x和y长
    * <p> 备注:要能如此挑剔的地布局,container 必须预先设定为网格布局器:GridBagLayout,
    * <p>       然后用 GridBagContstraints 协调布局
    * <p>原函数来自"Java程序设计教程"第五版 P530页,函数有被我加强功能
    * @param container   Container 要布局的容器
    * @param layout      GridBagLayout 网格布局器
    * @param constraints GridBagConstraints 约束器
    * @param componentToAdd Component 要添加的目标组件
    * @param row         目标组件要添加的行
    * @param column      目标组件要添加的列
    * @param height      目标组件占据的高度
    * @param width       目标组件占据的宽度
    * @param x           目标组件在水平方向的拉伸能力
    * @param y           目标组件在垂直方向的拉伸能力<p>
    =========================================================================*/
   protected void addComponent(
           Container container, GridBagLayout layout,
           GridBagConstraints constraints,
           Component componentToAdd, int row, int column, int height,
           int width, int x, int y) {
       constraints.gridx = column; //组件所在列
       constraints.gridy = row; //组件所在行

       constraints.gridwidth = width; //组件宽度
       constraints.gridheight = height; //组件高度

       constraints.weightx = x; //组件在水平方向的拉伸能力
       constraints.weighty = y; //组件在垂直方向的拉伸能力

       layout.setConstraints(componentToAdd, constraints); //设置目标组件的约束
       container.add(componentToAdd); //在容器中添加目标组件
   }

   /**<p>
    * =========================================================================
    * <p> 功能强大的工具函数:布局器
    * <p> 将指定组件安装到此 Panel 内
    * @param componentToAdd Component 要添加的目标组件
    * @param row         目标组件要添加的行
    * @param column      目标组件要添加的列
    * @param height      目标组件占据的高度
    * @param width       目标组件占据的宽度
    * @param x           目标组件在水平方向的拉伸能力
    * @param y           目标组件在垂直方向的拉伸能力<p>
    =========================================================================*/
   protected void addComponent(Component componentToAdd,
                               int row, int column, int height,
                               int width, int xAblility, int yAblity) {
       addComponent(container, layout, constraints, componentToAdd,
                    row, column, height, width, xAblility, yAblity);
   }
}
  • zjldz1970 | 2009-12-14 16:09:47
  • 吐血大奉献了
    总共两个文件,第一个是启动文件,第二个是一个基础面板类,可以运行。已经帮你排好版面了,只是未有添加事件响应,你研究一下自己添加吧
    package com;

    import com.ren.BasePanel;
    import javax.swing.*;
    import java.awt.BorderLayout;
    import java.awt.Toolkit;

    public class SwingTest extends JFrame {
      public static void main(String args[]) {
          new SwingTest();
      }

      public SwingTest() {
          super("SwingTextField 测试");
          init();
          setup();
          this.setSize(800, 300);
          this.setVisible(true);
          this.setLocation
                  ( //定位框架位置
                          (int) (Toolkit.getDefaultToolkit().getScreenSize().
                                 getWidth() - 400) / 2,
                          (int) (Toolkit.getDefaultToolkit().getScreenSize().
                                 getHeight() - 300) / 2
                  );
          this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      }

      BasePanel leftPanel;
      BasePanel rightPanel;
      JTextField country = new JTextField(16);
      JButton search = new JButton("SEARCH");
      JTextField latitude = new JTextField(40);
      JTextField currentTime = new JTextField(40);
      JTextField wind = new JTextField(40);
      JTextField visibilityField = new JTextField(40);
      JTextField skycondition = new JTextField(40);
      JTextField dewpoint = new JTextField(40);
      JTextField relativehumidity = new JTextField(40);
      JTextField presure = new JTextField(40);

      public void init() {
          leftPanel = new BasePanel() {
              public void initAllComponents() {
              }

              public void layoutAllComponents() {
                  addComponent(country, 0, 0, 1, 1, 10, 10);
                  addComponent(search, 1, 0, 1, 1, 10, 10);
              }
          };

          rightPanel = new BasePanel() {
              public void initAllComponents() {
              }

              public void layoutAllComponents() {
                  addComponent(latitude, 0, 0, 1, 1, 10, 10);
                  addComponent(currentTime, 1, 0, 1, 1, 10, 10);
                  addComponent(wind, 2, 0, 1, 1, 10, 10);
                  addComponent(visibilityField, 3, 0, 1, 1, 10, 10);
                  addComponent(skycondition, 4, 0, 1, 1, 10, 10);
                  addComponent(dewpoint, 5, 0, 1, 1, 10, 10);
                  addComponent(relativehumidity, 6, 0, 1, 1, 10, 10);
                  addComponent(presure, 7, 0, 1, 1, 10, 10);
              }
          };
      }

      public void setup() {
          this.setLayout(new BorderLayout());
          this.add(leftPanel, BorderLayout.WEST);
          this.add(rightPanel, BorderLayout.EAST);
      }
    }

    以下是我以前的经验总结,比较有用的一个类,你可以好好研究一下
    /**<p>
    * =============================================================================
    * <p>Copyright (c) 2008, Ren Java Studio
    * <p>All rights reserved.<p>
    * =============================================================================
    * <p>文件名称:BasePanel.java
    * <p>文件标识:见配置管理计划书
    * <p>摘    要:抽象基础面板
    * @version 2.0
    * @author Ren
    * <p>完成日期:2008年5月5日.<p>
    =============================================================================*/
    package com.ren;

    import java.awt.*;
    import javax.swing.*;

    public abstract class BasePanel extends JPanel {
      /*当前面板的容器*/
      protected Container container;
      /*网格布局器*/
      protected GridBagLayout layout;
      /*网格布局器的约束器*/
      protected GridBagConstraints constraints;

      public BasePanel() {
          container = this;
          layout = new GridBagLayout();
          constraints = new GridBagConstraints();
          container.setLayout(layout);
          constraints.fill = constraints.BOTH; //在水平方向和垂直方向上同时调整组件大小
          initAllComponents();
          layoutAllComponents();
      }

      /**<p>
       * =========================================================================
       * <p>初始化所有GUI组件.<p>
       =========================================================================*/
      protected abstract void initAllComponents();

      /**@todo 继承之子类完成所有组件的初始化工作 */

      /**<p>
       * =========================================================================
       * <p>布局所有已经初始化了的GUI组件
       *<p><blockquote><pre>
       *   布局器,约束器必须已经初始化好
       *   然后再调用布局子函数进行网格布局
       *</pre></blockquote></p>
       =========================================================================*/
      protected abstract void layoutAllComponents();

      /**@todo 继承之子类完成组件具体的布局 */

      /**<p>
       * =========================================================================
       * <p> 工具函数:用于获取当前屏幕的分辨率
       * @return Dimension 屏幕大小<p>
       =========================================================================*/
      public Dimension getScreenSize() {
          return Toolkit.getDefaultToolkit().getScreenSize();
      }

      /**<p>
       * ==========================================================================
       * <p> 设置将本程序框架大小并将其定位于屏幕正中心
       * @param container Container 要设置的容器
       * @param width 本框架的宽度
       * @param height 本框架的高度<p>
       ==========================================================================*/
      protected void putToCenter(Component container, int width, int height) {
          container.setSize(width, height); //设置大小
          container.setLocation
                  ( //定位框架位置
                          (int) (Toolkit.getDefaultToolkit().getScreenSize().
                                 getWidth() - width) / 2,
                          (int) (Toolkit.getDefaultToolkit().getScreenSize().
                                 getHeight() - height) / 2
                  );
      }

      /**<p>
       * =========================================================================
       * <P> 获取整个桌面的大小
       * @return Rectangle 桌面大小.<p>
       ==========================================================================*/
      public java.awt.Rectangle getDesktopBounds() {
          GraphicsEnvironment env =
                  GraphicsEnvironment.getLocalGraphicsEnvironment();
          return env.getMaximumWindowBounds();
      }

      /**<p>
       * =========================================================================
       * <p> 设置将本程序框架大小并将其定位于屏幕(X,Y)坐标处宽和高为 width, height
       * @param container Container 要设置的容器
       * @param width int  宽度
       * @param height int 高度
       * @param startX int 放置位置的X坐标
       * @param startY int 放置位置的Y坐标<p>
       =========================================================================*/
      protected void putToPlace(Container container, int width, int height,
                                int startX, int startY
              ) {
          container.setLocation(startX, startY);
          container.setSize(width, height); //设置大小
      }

      /**<p>
       * =========================================================================
       * <p> 功能强大的工具函数:布局器
       * <p> 具体功能:
       * <p> 将 componentToAdd 组件安装到 container 容器中的
       * <p> 第 row 行, 第 column 列,并在 container 容器中
       * <p> 占据 height 行,width 列, 在X,Y方向分别可伸展x和y长
       * <p> 备注:要能如此挑剔的地布局,container 必须预先设定为网格布局器:GridBagLayout,
       * <p>       然后用 GridBagContstraints 协调布局
       * <p>原函数来自"Java程序设计教程"第五版 P530页,函数有被我加强功能
       * @param container   Container 要布局的容器
       * @param layout      GridBagLayout 网格布局器
       * @param constraints GridBagConstraints 约束器
       * @param componentToAdd Component 要添加的目标组件
       * @param row         目标组件要添加的行
       * @param column      目标组件要添加的列
       * @param height      目标组件占据的高度
       * @param width       目标组件占据的宽度
       * @param x           目标组件在水平方向的拉伸能力
       * @param y           目标组件在垂直方向的拉伸能力<p>
       =========================================================================*/
      protected void addComponent(
              Container container, GridBagLayout layout,
              GridBagConstraints constraints,
              Component componentToAdd, int row, int column, int height,
              int width, int x, int y) {
          constraints.gridx = column; //组件所在列
          constraints.gridy = row; //组件所在行

          constraints.gridwidth = width; //组件宽度
          constraints.gridheight = height; //组件高度

          constraints.weightx = x; //组件在水平方向的拉伸能力
          constraints.weighty = y; //组件在垂直方向的拉伸能力

          layout.setConstraints(componentToAdd, constraints); //设置目标组件的约束
          container.add(componentToAdd); //在容器中添加目标组件
      }

      /**<p>
       * =========================================================================
       * <p> 功能强大的工具函数:布局器
       * <p> 将指定组件安装到此 Panel 内
       * @param componentToAdd Component 要添加的目标组件
       * @param row         目标组件要添加的行
       * @param column      目标组件要添加的列
       * @param height      目标组件占据的高度
       * @param width       目标组件占据的宽度
       * @param x           目标组件在水平方向的拉伸能力
       * @param y           目标组件在垂直方向的拉伸能力<p>
       =========================================================================*/
      protected void addComponent(Component componentToAdd,
                                  int row, int column, int height,
                                  int width, int xAblility, int yAblity) {
          addComponent(container, layout, constraints, componentToAdd,
                       row, column, height, width, xAblility, yAblity);
      }
    }