如何使窗体自适应分辨率java swing
2011-09-05 20:53
197 查看
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);
}
}
总共两个文件,第一个是启动文件,第二个是一个基础面板类,可以运行。已经帮你排好版面了,只是未有添加事件响应,你研究一下自己添加吧
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);
}
}
相关文章推荐
- JAVA中如何设置图片(图标)自适应Jlable等组件的大小
- java swing中添加菜单和 选项卡窗体 。
- Webview--如何让加载进来的页面自适应手机屏幕分辨率居中
- 渣渣上路,请问java如何在不规则窗体上添加组件?
- Swing:关于Java界面编程的第一课,如何正确的处理界面中的线程
- java swing: JFrame 父子窗口之间如何传值
- atitit.窗体静听esc退出本窗体java swing c# .net php
- Java Swing快速构建窗体应用程序
- 在java中,如何使swing的窗口显示在屏幕正中间
- java swing中添加菜单和 选项卡窗体 。
- 关于“C# 窗体程序自适应分辨率” 的一些探索
- 在Java程序,如何实现自适应位置的快捷菜单
- JAVA Swing学习之窗体文本显示
- java 窗体程序swing
- [转]highcharts图表入门之:如何让highcharts图表自适应浏览器窗体的大小或者页面大小
- JAVA SWING第一个窗体应用程序
- 窗体自适应分辨率
- android 如何做屏幕自适应, 在不可调整分辨率的情况下(据说某些新出的机器可调,也就是说大部分机器分辨率都不可调的)
- 程序窗体及控件自适应分辨率
- 我遇到的java笔试题->Swing组件JList的列表数据修改了,如何通知JList改变显示?