javax.Swing 使用GridBagLayout的程序栗子

摘自https://zhidao.baidu.com/question/110748776.html

javax.Swing 使用GridBagLayout的程序栗子

总共两个文件,第一个是启动文件,第二个是一个基础面板类
 1 package com;
 2
 3 import com.ren.BasePanel;
 4 import javax.swing.*;
 5 import java.awt.BorderLayout;
 6 import java.awt.Toolkit;
 7
 8 public class SwingTest extends JFrame {
 9     public static void main(String args[]) {
10         new SwingTest();
11     }
12
13     public SwingTest() {
14         super("SwingTextField 测试");
15         init();
16         setup();
17         this.setSize(800, 300);
18         this.setVisible(true);
19         this.setLocation
20                 ( //定位框架位置
21                         (int) (Toolkit.getDefaultToolkit().getScreenSize().
22                                getWidth() - 400) / 2,
23                         (int) (Toolkit.getDefaultToolkit().getScreenSize().
24                                getHeight() - 300) / 2
25                 );
26         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
27     }
28
29     BasePanel leftPanel;
30     BasePanel rightPanel;
31     JTextField country = new JTextField(16);
32     JButton search = new JButton("SEARCH");
33     JTextField latitude = new JTextField(40);
34     JTextField currentTime = new JTextField(40);
35     JTextField wind = new JTextField(40);
36     JTextField visibilityField = new JTextField(40);
37     JTextField skycondition = new JTextField(40);
38     JTextField dewpoint = new JTextField(40);
39     JTextField relativehumidity = new JTextField(40);
40     JTextField presure = new JTextField(40);
41
42     public void init() {
43         leftPanel = new BasePanel() {
44             public void initAllComponents() {
45             }
46
47             public void layoutAllComponents() {
48                 addComponent(country, 0, 0, 1, 1, 10, 10);
49                 addComponent(search, 1, 0, 1, 1, 10, 10);
50             }
51         };
52
53         rightPanel = new BasePanel() {
54             public void initAllComponents() {
55             }
56
57             public void layoutAllComponents() {
58                 addComponent(latitude, 0, 0, 1, 1, 10, 10);
59                 addComponent(currentTime, 1, 0, 1, 1, 10, 10);
60                 addComponent(wind, 2, 0, 1, 1, 10, 10);
61                 addComponent(visibilityField, 3, 0, 1, 1, 10, 10);
62                 addComponent(skycondition, 4, 0, 1, 1, 10, 10);
63                 addComponent(dewpoint, 5, 0, 1, 1, 10, 10);
64                 addComponent(relativehumidity, 6, 0, 1, 1, 10, 10);
65                 addComponent(presure, 7, 0, 1, 1, 10, 10);
66             }
67         };
68     }
69
70     public void setup() {
71         this.setLayout(new BorderLayout());
72         this.add(leftPanel, BorderLayout.WEST);
73         this.add(rightPanel, BorderLayout.EAST);
74     }
75 }
以下是我以前的经验总结,比较有用的一个类,你可以好好研究一下
  1 /**<p>
  2  * =============================================================================
  3  * <p>Copyright (c) 2008, Ren Java Studio
  4  * <p>All rights reserved.<p>
  5  * =============================================================================
  6  * <p>文件名称:BasePanel.java
  7  * <p>文件标识:见配置管理计划书
  8  * <p>摘    要:抽象基础面板
  9  * @version 2.0
 10  * @author Ren
 11  * <p>完成日期:2008年5月5日.<p>
 12  =============================================================================*/
 13 package com.ren;
 14
 15 import java.awt.*;
 16 import javax.swing.*;
 17
 18 public abstract class BasePanel extends JPanel {
 19     /*当前面板的容器*/
 20     protected Container container;
 21     /*网格布局器*/
 22     protected GridBagLayout layout;
 23     /*网格布局器的约束器*/
 24     protected GridBagConstraints constraints;
 25
 26     public BasePanel() {
 27         container = this;
 28         layout = new GridBagLayout();
 29         constraints = new GridBagConstraints();
 30         container.setLayout(layout);
 31         constraints.fill = constraints.BOTH; //在水平方向和垂直方向上同时调整组件大小
 32         initAllComponents();
 33         layoutAllComponents();
 34     }
 35
 36     /**<p>
 37      * =========================================================================
 38      * <p>初始化所有GUI组件.<p>
 39      =========================================================================*/
 40     protected abstract void initAllComponents();
 41
 42     /**@todo 继承之子类完成所有组件的初始化工作 */
 43
 44     /**<p>
 45      * =========================================================================
 46      * <p>布局所有已经初始化了的GUI组件
 47      *<p><blockquote><pre>
 48      *   布局器,约束器必须已经初始化好
 49      *   然后再调用布局子函数进行网格布局
 50      *</pre></blockquote></p>
 51      =========================================================================*/
 52     protected abstract void layoutAllComponents();
 53
 54     /**@todo 继承之子类完成组件具体的布局 */
 55
 56     /**<p>
 57      * =========================================================================
 58      * <p> 工具函数:用于获取当前屏幕的分辨率
 59      * @return Dimension 屏幕大小<p>
 60      =========================================================================*/
 61     public Dimension getScreenSize() {
 62         return Toolkit.getDefaultToolkit().getScreenSize();
 63     }
 64
 65     /**<p>
 66      * ==========================================================================
 67      * <p> 设置将本程序框架大小并将其定位于屏幕正中心
 68      * @param container Container 要设置的容器
 69      * @param width 本框架的宽度
 70      * @param height 本框架的高度<p>
 71      ==========================================================================*/
 72     protected void putToCenter(Component container, int width, int height) {
 73         container.setSize(width, height); //设置大小
 74         container.setLocation
 75                 ( //定位框架位置
 76                         (int) (Toolkit.getDefaultToolkit().getScreenSize().
 77                                getWidth() - width) / 2,
 78                         (int) (Toolkit.getDefaultToolkit().getScreenSize().
 79                                getHeight() - height) / 2
 80                 );
 81     }
 82
 83     /**<p>
 84      * =========================================================================
 85      * <P> 获取整个桌面的大小
 86      * @return Rectangle 桌面大小.<p>
 87      ==========================================================================*/
 88     public java.awt.Rectangle getDesktopBounds() {
 89         GraphicsEnvironment env =
 90                 GraphicsEnvironment.getLocalGraphicsEnvironment();
 91         return env.getMaximumWindowBounds();
 92     }
 93
 94     /**<p>
 95      * =========================================================================
 96      * <p> 设置将本程序框架大小并将其定位于屏幕(X,Y)坐标处宽和高为 width, height
 97      * @param container Container 要设置的容器
 98      * @param width int  宽度
 99      * @param height int 高度
100      * @param startX int 放置位置的X坐标
101      * @param startY int 放置位置的Y坐标<p>
102      =========================================================================*/
103     protected void putToPlace(Container container, int width, int height,
104                               int startX, int startY
105             ) {
106         container.setLocation(startX, startY);
107         container.setSize(width, height); //设置大小
108     }
109
110     /**<p>
111      * =========================================================================
112      * <p> 功能强大的工具函数:布局器
113      * <p> 具体功能:
114      * <p> 将 componentToAdd 组件安装到 container 容器中的
115      * <p> 第 row 行, 第 column 列,并在 container 容器中
116      * <p> 占据 height 行,width 列, 在X,Y方向分别可伸展x和y长
117      * <p> 备注:要能如此挑剔的地布局,container 必须预先设定为网格布局器:GridBagLayout,
118      * <p>       然后用 GridBagContstraints 协调布局
119      * <p>原函数来自"Java程序设计教程"第五版 P530页,函数有被我加强功能
120      * @param container   Container 要布局的容器
121      * @param layout      GridBagLayout 网格布局器
122      * @param constraints GridBagConstraints 约束器
123      * @param componentToAdd Component 要添加的目标组件
124      * @param row         目标组件要添加的行
125      * @param column      目标组件要添加的列
126      * @param height      目标组件占据的高度
127      * @param width       目标组件占据的宽度
128      * @param x           目标组件在水平方向的拉伸能力
129      * @param y           目标组件在垂直方向的拉伸能力<p>
130      =========================================================================*/
131     protected void addComponent(
132             Container container, GridBagLayout layout,
133             GridBagConstraints constraints,
134             Component componentToAdd, int row, int column, int height,
135             int width, int x, int y) {
136         constraints.gridx = column; //组件所在列
137         constraints.gridy = row; //组件所在行
138
139         constraints.gridwidth = width; //组件宽度
140         constraints.gridheight = height; //组件高度
141
142         constraints.weightx = x; //组件在水平方向的拉伸能力
143         constraints.weighty = y; //组件在垂直方向的拉伸能力
144
145         layout.setConstraints(componentToAdd, constraints); //设置目标组件的约束
146         container.add(componentToAdd); //在容器中添加目标组件
147     }
148
149     /**<p>
150      * =========================================================================
151      * <p> 功能强大的工具函数:布局器
152      * <p> 将指定组件安装到此 Panel 内
153      * @param componentToAdd Component 要添加的目标组件
154      * @param row         目标组件要添加的行
155      * @param column      目标组件要添加的列
156      * @param height      目标组件占据的高度
157      * @param width       目标组件占据的宽度
158      * @param x           目标组件在水平方向的拉伸能力
159      * @param y           目标组件在垂直方向的拉伸能力<p>
160      =========================================================================*/
161     protected void addComponent(Component componentToAdd,
162                                 int row, int column, int height,
163                                 int width, int xAblility, int yAblity) {
164         addComponent(container, layout, constraints, componentToAdd,
165                      row, column, height, width, xAblility, yAblity);
166     }
167 }
时间: 2024-11-04 08:38:09

javax.Swing 使用GridBagLayout的程序栗子的相关文章

14.4-全栈Java笔记: javax.swing常用控件有哪些?怎么用?

常用基本控件 javax.swing.JButton 在图形界面程序中,按钮可能是使用量最大的控件之一,javax.swing包中JButton类就是用来创建按钮的.如表1所示,为JButton常用的构造方法.  javax.swing.JLabel JLabel控件是最简单的Swing组件之一,用于在窗体上显示标签, JLabel既可以显示文本,也可以显示图像.如表3所示,为JLabel常用的构造方法. 注意: JLabel只能用于显示文本和图标信息,用户不能对其进行修改. javax.swi

javax.swing.jFrame

原文地址:java布局管理器总结作者:技术羊 之前在使用的过程中一直对java中swing的布局管理器感到很困惑,以下是在网上找到的一篇文章.其中我重点关注了一下gridbaglayout.写的比较详尽: BorderLayout FlowLayout GridLayout GridBagLayout CardLayout BoxLayout 1.BorderLayout java.lang.Object --java.awt.BorderLayout 将版面划分成东.西.南.北.中五个区域,将

javax.swing.JComponent 调用顺序

网上截取的,感觉挺有用,记录下来. http://bbs.csdn.net/topics/310041707 java swing 感觉好复杂啊…………一点都不想用但是作业要用到 >_<; javax.swing.JComponent类中repaint()调用update() update()调用paint() paint()调用paintComponent(),paintBorder(),及paintChildren() 附代码 1 package com.test; 2 import ja

import javax.swing.JOptionPane

import是引入的意思,   javax.swing是sun为我们提供的一个包,包中有一个类叫 JoptionPane.JOptionPane 是有助于方便地弹出要求用户提供值或向其发出通知的标准对话框.  它是用来编写图形用户界面的一个类.合起来讲就是:导入包javax.swing中JOptionPane这个类,这样在你的这个文件中就能使用这个类了. import javax.swing.JOptionPane,布布扣,bubuko.com

javax.swing.JPanel

实现的接口:Accessible,ImageObserver,MenuContainer,Serializable 已知的直接子类:AbstratColorChooserPanel ,JSpinner.DefaultEditor JPanel是一个通用的轻量级容器. 警告: Serialized objects of thisclass will not be compatible with future Swing releases. Thecurrent serialization supp

今天发现了一个快捷方式(swing开发中的程序focus点的寻找)

今天在调试程序时,由于需要知道focus到底是在表格上,还是在表格中的editor中,这个问题一般情况下,需要在程序代码中打印下来focusOwner,但是今天又发现了另外一种方式来做,在这里共享给大家,有助于java 程序调试便捷高效. 另外这种方法就是,运行Eclipse,然后呢,程序跑起来之后,按键盘的快捷键:ctrl+shift+alt+F,按一下,程序界面中就会出现focus状态,显示目前光标focus到的是哪个控件,如果再按一下,此focus功能就关闭了.太神奇了,既高效有便捷的一种

javax.swing.Timer类的使用

package com.sadhu; import java.util.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.Timer; import java.text.SimpleDateFormat; /** Timer类的使用 在一定的时间段内执行一次指定的对象的方法. */ public class Sample {     public static void 

JSP---调用javax.swing.JOptionPane类的对话框方法

Show an error dialog that displays the message, 'alert': JOptionPane.showMessageDialog(null, "alert", "alert", JOptionPane.ERROR_MESSAGE); Show an internal information dialog with the message, 'information':JOptionPane.showInternalMess

javax.swing.Timer的使用

以指定的间隔触发一个或多个ActionEvent s. 示例使用是使用Timer作为绘制其帧的触发器的动画对象. 设置定时器包括创建一个Timer对象,在其上注册一个或多个动作侦听器,并使用start方法启动定时器. 例如,下面的代码创建并启动每秒一次触发一个动作事件(由第一个参数指定定时器Timer构造函数). Timer构造函数的第二个参数指定一个侦听器来接收定时器的动作事件. public class MyTimer { public static void main(String[] a