JAVA 获得窗口大小问题

怎样动态获得窗口的大小,也就是运行了程序弹出一个窗口,窗口本来大小是(400,300),如果用户点右上角的那个正方形打窗口全屏化,窗口的默认面板大小也变大了,但那里的组件... 怎样动态获得窗口的大小,也就是运行了程序弹出一个窗口,窗口本来大小是(400,300),如果用户点右上角的那个正方形打窗口全屏化,窗口的默认面板大小也变大了,但那里的组件就没变,还是原来的大小.
请问有没有,监视窗口变化的事件,从而得到新的大小,再改变各组件的大小!或者方法?
展开
 我来答
百度网友d921d02
2008-01-09 · TA获得超过1107个赞
知道小有建树答主
回答量:383
采纳率:0%
帮助的人:582万
展开全部
楼主是想让控件随frame大小变化

首先,建一个frame文件(Application应用程序),在Design中将this中的layout设置为null(不要布局器);
第二,在组件盘内点选Swing Container页签,选取Jpanel图标,在this上方拖拽一块区域,同样的方法在下方也拖拽一块区域,为了方便区分,将上方的Jpanel1区域设置为红色,下方的Jpanel2区域设置为橙色。将Jpanel1和Jpanel2的layout设置为null(不要布局器)。
第三,在Jpanel中放入一个Jlable标题栏,JTextField1文本框和Jbutton按钮,在组件盘内点选Swing 页签,选取JLable图标在Jpanel1的左边画一个标题栏,将text改为“请输入查询条件”,再选取JtextField在Jpanel1的中间画一个文本框,将text改为空,最后选取Jbutton在Jpanel1又边画一个按钮将text改为“查询”。在Jpanel2中画三个Jbutton按钮,将text分别设为“增加”、“删除”、“修改”。
第四,在this的中间建一个表格用来显示数据库数据的内容,在Swing Container页签,选取jScrollPane图标,在this的中间拖拽一个大的区域,接着在组件盘内点选Swing 页签,选取JTable图标,将Jtable加入到jScrollPane中。
这样我的界面就做好了,但这个界面不能随窗口自动调整大小。下面编程实现手动布局,使各区域能随窗口自动调整大小。
先用鼠标选中this窗体,再选择右边的事件Events中的componentResized,双击鼠标就进到void this_componentResized(ComponentEvent e) {}中,在{}中写入下列代码:

//设置jPanel1的起点坐标
jPanel1.setLocation(0,0);
//设置jPanel1的高度和宽度
jPanel1.setSize(this.getWidth(),jPanel1.getHeight());

//设置jPanel2的起点坐标(37是标题栏的高度)
jPanel2.setLocation(0,this.getHeight()-jPanel2.getHeight()-37);
//设置jPanel1的高度和宽度
jPanel2.setSize(this.getWidth(),jPanel2.getHeight());

//设置jScrollPanel的起点坐标
jScrollPane1.setLocation(0,jPanel1.getHeight());
//设置jScrollPanel的高度和宽度
jScrollPane1.setSize(this.getWidth(),jPanel2.getY()-jPanel1.getHeight());

本程序只调整了Jpanel1、Jpanel2和JScrollPane1随窗口变化,同样的方法,可以使按钮、文本框等一起随窗口变化。
程序在“查询”按钮事件中模拟从数据库中取数据,并显示在表格中。为了简洁,程序没有对输入条件、增加、删除、修改等进行处理。
程序源代码:

package src

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
import javax.swing.table.DefaultTableModel;

public class Frame1 extends JFrame {
JPanel jPanel1 = new JPanel();
JPanel jPanel2 = new JPanel();
JScrollPane jScrollPane1 = new JScrollPane();
JTable jTable1 = new JTable();
JLabel jLabel1 = new JLabel();
JTextField jTextField1 = new JTextField();
JButton jButton1 = new JButton();
JButton jButton2 = new JButton();
JButton jButton3 = new JButton();
JButton jButton4 = new JButton();

public Frame1() {
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Frame1 frame1 = new Frame1();
//定义显示窗体的大小显示窗口
frame1.setSize(400, 350);
frame1.show();
//激活“查询”按钮事件
frame1.jButton1.doClick();
}
private void jbInit() throws Exception {
this.getContentPane().setLayout(null);
jPanel1.setBackground(Color.red);
jPanel1.setBounds(new Rectangle(43, 15, 297, 48));
jPanel1.setLayout(null);
jPanel2.setBounds(new Rectangle(50, 232, 297, 48));
jPanel2.setLayout(null);
jPanel2.setBackground(Color.orange);
jScrollPane1.getViewport().setBackground(Color.pink);
jScrollPane1.setBounds(new Rectangle(53, 74, 287, 138));
jLabel1.setFont(new java.awt.Font("Dialog", 0, 15));
jLabel1.setText("输入查内容");
jLabel1.setBounds(new Rectangle(44, 12, 80, 27));
jTextField1.setText("");
jTextField1.setBounds(new Rectangle(125, 14, 70, 22));
jButton1.setBounds(new Rectangle(221, 12, 61, 24));
jButton1.setFont(new java.awt.Font("Dialog", 0, 13));
jButton1.setText("查询");
jButton1.addActionListener(new Frame1_jButton1_actionAdapter(this));
jButton2.setBounds(new Rectangle(13, 14, 66, 27));
jButton2.setFont(new java.awt.Font("Dialog", 0, 13));
jButton2.setText("增加");
jButton3.setText("删除");
jButton3.setBounds(new Rectangle(115, 14, 66, 27));
jButton3.setFont(new java.awt.Font("Dialog", 0, 13));
jButton4.setText("修改");
jButton4.setBounds(new Rectangle(217, 14, 66, 27));
jButton4.setFont(new java.awt.Font("Dialog", 0, 13));
this.addHierarchyBoundsListener(new Frame1_this_hierarchyBoundsAdapter(this));
this.addComponentListener(new Frame1_this_componentAdapter(this));
this.getContentPane().add(jPanel1, null);
jPanel1.add(jTextField1, null);
jPanel1.add(jButton1, null);
jPanel1.add(jLabel1, null);
this.getContentPane().add(jPanel2, null);
jPanel2.add(jButton3, null);
jPanel2.add(jButton4, null);
jPanel2.add(jButton2, null);
this.getContentPane().add(jScrollPane1, null);
jScrollPane1.getViewport().add(jTable1, null);
}

void this_componentResized(ComponentEvent e) {
//设置jPanel1的起点坐标
jPanel1.setLocation(0,0);
//设置jPanel1的高度和宽度
jPanel1.setSize(this.getWidth(),jPanel1.getHeight());

//设置jPanel2的起点坐标(37是标题栏的高度)
jPanel2.setLocation(0,this.getHeight()-jPanel2.getHeight()-37);
//设置jPanel2的高度和宽度
jPanel2.setSize(this.getWidth(),jPanel2.getHeight());

//设置jScrollPanel的起点坐标
jScrollPane1.setLocation(0,jPanel1.getHeight());
//设置jScrollPanel的高度和宽度
jScrollPane1.setSize(this.getWidth(),jPanel2.getY()-jPanel1.getHeight());
}

void jButton1_actionPerformed(ActionEvent e) {
// “查询”按钮事件,模拟从数据库中取数据并显示在表格中
try
{
Vector vcol = new Vector(); //列名
Vector vrow = new Vector(); //内容
//用一个for循环来模拟数据库的内容
for (int col=1;col<31;col++) {
vcol.addElement("列"+col);
}
for (int row=1;row<101;row++) {
Vector vr1 = new Vector();
for (int col=1;col<31;col++) {
vr1.addElement(row+"/"+col);
}
vrow.addElement(vr1);
}
DefaultTableModel dtm=new DefaultTableModel(vrow,vcol);
jTable1 = new JTable(vrow,vcol);
//滚动条设置左右滚
jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
//在滚动条中放入表
this.jScrollPane1.getViewport().add(jTable1, null);
}
catch(Exception ex)
{
System.out.println("错误:" + ex);
}
}
}

class Frame1_this_hierarchyBoundsAdapter extends java.awt.event.HierarchyBoundsAdapter {
Frame1 adaptee;

Frame1_this_hierarchyBoundsAdapter(Frame1 adaptee) {
this.adaptee = adaptee;
}
public void ancestorResized(HierarchyEvent e) {

}
}

class Frame1_this_componentAdapter extends java.awt.event.ComponentAdapter {
Frame1 adaptee;

Frame1_this_componentAdapter(Frame1 adaptee) {
this.adaptee = adaptee;
}
public void componentResized(ComponentEvent e) {
adaptee.this_componentResized(e);
}
}

class Frame1_jButton1_actionAdapter implements java.awt.event.ActionListener {
Frame1 adaptee;

Frame1_jButton1_actionAdapter(Frame1 adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton1_actionPerformed(e);
}
}

参考资料: http://www.javaresearch.org/article/16289.htm

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
桑琪0im
2008-01-09 · TA获得超过3114个赞
知道小有建树答主
回答量:1268
采纳率:0%
帮助的人:427万
展开全部
不知道你的意思是不是说当窗口变大时窗口里面的控也跟着变大。比如一窗体中只有一个表格,当窗体全屏化的时候表格也跟着变大。如果是这样的话可以用“布局管理器”啊。呵呵,不是很懂你的意思
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cliff77
2008-01-09 · TA获得超过482个赞
知道小有建树答主
回答量:276
采纳率:0%
帮助的人:0
展开全部
楼上方法太麻烦了,还是使用一楼所说的布局管理器,建议看看java核心技术卷一中关于布局管理器那一章的论述,讲的很详细,可以解决楼主的问题。不仅能使组件随窗口大小变化,还能规定哪些组件随着变,哪些不随着变,变化还能规定最大变化到多少,都是布局管理器自动完成的,只需要语句设置就可以。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式