当前位置: 技术问答>java相关
如何让主窗口一起来就最大化?
来源: 互联网 发布时间:2015-02-25
本文导语: 我找遍了JBuilder的帮助也没找到有关函数,像VC中show(SW_MAX)多好呀! | JDK1.4可以! 无修饰的 Frame 使用这两种功能的最简单之处是支持无修饰 Frame。要隐藏 Frame 上的 Title bar,需要将指定 Fr...
我找遍了JBuilder的帮助也没找到有关函数,像VC中show(SW_MAX)多好呀!
|
JDK1.4可以!
无修饰的 Frame
使用这两种功能的最简单之处是支持无修饰 Frame。要隐藏 Frame 上的 Title bar,需要将指定 Frame 的 undecorated 属性设为 true。缺省情况下,该值为 false,当 Frame 显示出来后,您就无法更改此设置(如果您尝试更改的话,系统会抛出一个 IllegalComponentStateException 异常)。
清单 1. 创建一个无修饰的 Frame
Frame frame = new Frame();
frame.setUndecorated(true);
由于 Title bar 和其它的窗口修饰现在都已被隐藏,您无法依靠底层窗口管理系统提供对拖曳 Frame 的支持。您必须自己用一对鼠标侦听器来添加该支持。
清单 2. 添加拖曳支持
// Avoid creating a point with each mousePressed() call
Point origin = new Point();
frame.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
origin.x = e.getX();
origin.y = e.getY();
}
});
frame.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
Point p = frame.getLocation();
frame.setLocation(
p.x + e.getX() - origin.x,
p.y + e.getY() - origin.y);
}
});
最大化 Frame
版本 1.2 中添加了 setState() 方法可实现编程控制图标化。现在,在版本 1.4 中用的是 setExtendedState() 方法。这种方法使用可接受状态(共 4 种)的位掩码标志。第 5 个标志 MAXIMIZED_BOTH,是其它两者的组合。可接受状态有:
NORMAL — Frame 正常大小状态
ICONIFIED — 图标化状态
MAXIMIZED_BOTH — Frame 最大化状态(水平最大化和垂直最大化)
MAXIMIZED_HORIZ — 水平最大化状态(窗口环境可能不支持)
MAXIMIZED_VERT — 垂直最大化状态(窗口环境可能不支持)
通常情况下,您可能只用前 3 种状态。如果您发现需要组合状态,比如您希望将 Frame 图标化,但又要保留其当前最大化状态,您就要使用竖线(|)组合多种状态。然后,一旦您已经确定了正确的状态,就要使用新的 setExtendedState() 方法来更改 Frame 状态。
清单 3. 保留最大化状态
// Preserve maximized
frame.setExtendedState(Frame.ICONIFIED
| frame.getExtendedState());
一个完整的示例
下面是一个完整的示例,它隐藏 Frame 修饰,然后添加用于最大化、正常化、图标化(最小化)窗口的窗口按钮,并通过简单的 AWT 按钮组件关闭这个 Frame。除了按钮之外,还有一个区域可供拖曳 Frame。
清单 4. Frame 修饰的完整示例
import java.awt.*;
import java.awt.event.*;
public class FrameTest {
static Point origin = new Point();
public static void main (String args[]) {
final Frame frame = new Frame();
frame.setUndecorated(true);
frame.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
origin.x = e.getX();
origin.y = e.getY();
}
});
frame.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
Point p = frame.getLocation();
frame.setLocation(
p.x + e.getX() - origin.x,
p.y + e.getY() - origin.y);
}
});
frame.setSize(300, 300);
Button b1 = new Button("Maximize");
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
frame.setExtendedState(Frame.MAXIMIZED_BOTH);
}
});
Button b2 = new Button("Iconify");
b2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Preserve maximizing
frame.setExtendedState(Frame.ICONIFIED
| frame.getExtendedState());
}
});
Button b3 = new Button("Normal");
b3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
frame.setExtendedState(Frame.NORMAL);
}
});
Button b4 = new Button("Close");
b4.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
frame.setLayout(new GridLayout(5,1));
frame.add(b1);
frame.add(b2);
frame.add(b3);
frame.add(b4);
frame.show();
}
}
无修饰的 Frame
使用这两种功能的最简单之处是支持无修饰 Frame。要隐藏 Frame 上的 Title bar,需要将指定 Frame 的 undecorated 属性设为 true。缺省情况下,该值为 false,当 Frame 显示出来后,您就无法更改此设置(如果您尝试更改的话,系统会抛出一个 IllegalComponentStateException 异常)。
清单 1. 创建一个无修饰的 Frame
Frame frame = new Frame();
frame.setUndecorated(true);
由于 Title bar 和其它的窗口修饰现在都已被隐藏,您无法依靠底层窗口管理系统提供对拖曳 Frame 的支持。您必须自己用一对鼠标侦听器来添加该支持。
清单 2. 添加拖曳支持
// Avoid creating a point with each mousePressed() call
Point origin = new Point();
frame.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
origin.x = e.getX();
origin.y = e.getY();
}
});
frame.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
Point p = frame.getLocation();
frame.setLocation(
p.x + e.getX() - origin.x,
p.y + e.getY() - origin.y);
}
});
最大化 Frame
版本 1.2 中添加了 setState() 方法可实现编程控制图标化。现在,在版本 1.4 中用的是 setExtendedState() 方法。这种方法使用可接受状态(共 4 种)的位掩码标志。第 5 个标志 MAXIMIZED_BOTH,是其它两者的组合。可接受状态有:
NORMAL — Frame 正常大小状态
ICONIFIED — 图标化状态
MAXIMIZED_BOTH — Frame 最大化状态(水平最大化和垂直最大化)
MAXIMIZED_HORIZ — 水平最大化状态(窗口环境可能不支持)
MAXIMIZED_VERT — 垂直最大化状态(窗口环境可能不支持)
通常情况下,您可能只用前 3 种状态。如果您发现需要组合状态,比如您希望将 Frame 图标化,但又要保留其当前最大化状态,您就要使用竖线(|)组合多种状态。然后,一旦您已经确定了正确的状态,就要使用新的 setExtendedState() 方法来更改 Frame 状态。
清单 3. 保留最大化状态
// Preserve maximized
frame.setExtendedState(Frame.ICONIFIED
| frame.getExtendedState());
一个完整的示例
下面是一个完整的示例,它隐藏 Frame 修饰,然后添加用于最大化、正常化、图标化(最小化)窗口的窗口按钮,并通过简单的 AWT 按钮组件关闭这个 Frame。除了按钮之外,还有一个区域可供拖曳 Frame。
清单 4. Frame 修饰的完整示例
import java.awt.*;
import java.awt.event.*;
public class FrameTest {
static Point origin = new Point();
public static void main (String args[]) {
final Frame frame = new Frame();
frame.setUndecorated(true);
frame.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
origin.x = e.getX();
origin.y = e.getY();
}
});
frame.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
Point p = frame.getLocation();
frame.setLocation(
p.x + e.getX() - origin.x,
p.y + e.getY() - origin.y);
}
});
frame.setSize(300, 300);
Button b1 = new Button("Maximize");
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
frame.setExtendedState(Frame.MAXIMIZED_BOTH);
}
});
Button b2 = new Button("Iconify");
b2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Preserve maximizing
frame.setExtendedState(Frame.ICONIFIED
| frame.getExtendedState());
}
});
Button b3 = new Button("Normal");
b3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
frame.setExtendedState(Frame.NORMAL);
}
});
Button b4 = new Button("Close");
b4.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
frame.setLayout(new GridLayout(5,1));
frame.add(b1);
frame.add(b2);
frame.add(b3);
frame.add(b4);
frame.show();
}
}
|
在IBM的中文网站上你可以找到答案,上面推荐使用jdk1.4。jdk1.4获得比较方便。
|
Maximize a Frame
// place this in the Frame constructor, after the show()
this.move(0,0);
resize(Toolkit.getDefaultToolkit().getScreenSize());
NOTE: JDK1.2 offers a new method, setState(), to minimize or maximize a Frame.
// place this in the Frame constructor, after the show()
this.move(0,0);
resize(Toolkit.getDefaultToolkit().getScreenSize());
NOTE: JDK1.2 offers a new method, setState(), to minimize or maximize a Frame.
|
也许可以通过事件触发,可以找找Frame是如何捕捉到最大化事件的,然后可以自己触发一个。
|
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class BigFrame extends JFrame
{
public BigFrame()
{
Container c=getContentPane();
c.setLayout(new BorderLayout());
c.add(new JLabel("Maximize frame at startup"),BorderLayout.CENTER);
Dimension screensize=Toolkit.getDefaultToolkit().getScreenSize();
setSize(screensize);
setVisible(true);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
public static void main(String args[])
{
new BigFrame();
}
}
import javax.swing.*;
import java.awt.event.*;
public class BigFrame extends JFrame
{
public BigFrame()
{
Container c=getContentPane();
c.setLayout(new BorderLayout());
c.add(new JLabel("Maximize frame at startup"),BorderLayout.CENTER);
Dimension screensize=Toolkit.getDefaultToolkit().getScreenSize();
setSize(screensize);
setVisible(true);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
public static void main(String args[])
{
new BigFrame();
}
}
|
使用Robot 类 (1.3以上)模拟鼠标点击该窗口的相对位置(也就是从最大化按钮的位置)
|
upup
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。