如何监听窗口变大变小以后的事件或窗口上的控件居中 如何监听窗口变大变小以后的事件,而不是窗口变大变小时事件,我要把画面上的控件居中表示,得在窗口变大变小以后才知道窗口大小,以便调整画面上的控件布局,或有别的方法让窗口上的控件居中表示吗 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 明白了,你要在窗口变化后重画控件,你可以得到窗体的大小,然后重新计算控件的位置。重写paint方法。 JFrame frame = new JFrame();Container content = frame.getContentPane();content.setLayout(new GridBagLayout());JButton btn = new JButton("Center");content.add(btn, new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0, GridBagConstriants.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));窗口变不变和你没有关系, 按钮总是居中的.布局的问题可以灵活使用Swing的布局管理器, 实在不行可以重写Layout, 不要去捕捉ComponentEvent(不要使用ComponentListener) 不行就用:cp.setLayout(null); 控件.setBounds(x,y,width,height);如果控件都是来自于同一个类,那么就再另外定义一个类,如(Point控件)这样一个类,我设计四国时,就这样做的 我用的是类WindowAdapter的public void windowStateChanged(WindowEvent e)的方法,可是它是窗口状态改变‘时’调用的,而我要的是窗口状态改变‘后’调用,如何实现? 我想你应该覆盖doLayout方法,或者自己写个布局管理器,让所有的控件居中,布局管理器作的就是这件事,不管窗口如何变化,都要调用布局管理器执行,Java使用Callback方法布局控件 能否提供一个有多个控件的JFrame 的布局管理器的例子 你在一个JPanel上放置所有控件,然后在JFrame中使用下边的这个布局管理器添加你的JPanel:import java.awt.*;import java.io.*;public class CenterLayout implements LayoutManager, Serializable { public void addLayoutComponent(String name, Component comp) { } public void removeLayoutComponent(Component comp) { } public Dimension preferredLayoutSize( Container container ) { Component c = container.getComponent( 0 ); if ( c != null ) { Dimension size = c.getPreferredSize(); Insets insets = container.getInsets(); return new Dimension(size.width + insets.left + insets.right, size.height + insets.top + insets.bottom); } else { return new Dimension( 0, 0 ); } } public Dimension minimumLayoutSize(Container cont) { return preferredLayoutSize(cont); } public void layoutContainer(Container container) { if (container.getComponentCount() > 0) { Component c = container.getComponent(0); Dimension pref = c.getPreferredSize(); int containerWidth = container.getWidth(); int containerHeight = container.getHeight(); Insets containerInsets = container.getInsets(); containerWidth -= containerInsets.left + containerInsets.right; containerHeight -= containerInsets.top + containerInsets.bottom; int left = (containerWidth - pref.width) / 2 + containerInsets.left; int right = (containerHeight - pref.height) / 2 + containerInsets.top; c.setBounds(left, right, pref.width, pref.height); } }} 你把所有组件放在一个Panel里面, 然后按我写得layout设置panel不就行了? bradwoo8621() 你把所有组件放在一个Panel里面, 然后按我写得layout设置panel不就行了? 我用了,窗口上变得什么也没有了??? content.add(btn, new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0, GridBagConstriants.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));解决 for是否应该避免定义变量? C原型,如何在JAVA中声明,引用? 求Java版的桌面弹窗代码 java方法重载问题 会的帮忙解释下?谢谢 多线程的设置讨论(讨论想法) 通过jdbc连接SQLServer2000报错 PrintTest.java的目录是C:\javacode\com\szallcom\tools;C:\javacode\wf\common目录有SystemProperties.class;编译要求引入wf.common.S 加载图象 ◎◎请教大虾◎◎html如何给applet传递参数? ArrayList排序加跌代器遍例 求救,急jsp+flash实现.swf文件的播放
Container content = frame.getContentPane();
content.setLayout(new GridBagLayout());
JButton btn = new JButton("Center");
content.add(btn, new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0, GridBagConstriants.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));窗口变不变和你没有关系, 按钮总是居中的.
布局的问题可以灵活使用Swing的布局管理器, 实在不行可以重写Layout, 不要去捕捉ComponentEvent(不要使用ComponentListener)
控件.setBounds(x,y,width,height);
如果控件都是来自于同一个类,那么就再另外定义一个类,如(Point控件)这样一个类,我设计四国时,就这样做的
public void windowStateChanged(WindowEvent e)的方法,可是它是窗口状态改变‘时’调用的,
而我要的是窗口状态改变‘后’调用,
如何实现?
import java.io.*;public class CenterLayout implements LayoutManager, Serializable {
public void addLayoutComponent(String name, Component comp) { }
public void removeLayoutComponent(Component comp) { } public Dimension preferredLayoutSize( Container container ) {
Component c = container.getComponent( 0 );
if ( c != null ) {
Dimension size = c.getPreferredSize();
Insets insets = container.getInsets(); return new Dimension(size.width + insets.left + insets.right,
size.height + insets.top + insets.bottom);
}
else {
return new Dimension( 0, 0 );
}
} public Dimension minimumLayoutSize(Container cont) {
return preferredLayoutSize(cont);
} public void layoutContainer(Container container) {
if (container.getComponentCount() > 0) {
Component c = container.getComponent(0);
Dimension pref = c.getPreferredSize();
int containerWidth = container.getWidth();
int containerHeight = container.getHeight();
Insets containerInsets = container.getInsets(); containerWidth -= containerInsets.left +
containerInsets.right;
containerHeight -= containerInsets.top +
containerInsets.bottom; int left = (containerWidth - pref.width) / 2 +
containerInsets.left;
int right = (containerHeight - pref.height) / 2 +
containerInsets.top; c.setBounds(left, right, pref.width, pref.height);
}
}
}
你把所有组件放在一个Panel里面, 然后按我写得layout设置panel不就行了?
我用了,窗口上变得什么也没有了???