当前位置:  技术问答>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();
  }
}

 


|
在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. 

|
也许可以通过事件触发,可以找找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();
}
}

|
使用Robot 类 (1.3以上)模拟鼠标点击该窗口的相对位置(也就是从最大化按钮的位置)

|
upup

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • top 显示的%MEM 是什么意思呢?我把这些值加起来超过了100%,这怎么回事呢?(我运行oracle,它的多个进程加起来就超过了。。。)
  • vmware怎么优化?在vmware上装linux运行起来是不是特别慢?我在256内存的p4上安装,运行起来很慢!
  • 求救!Redhat Linux 7.1加强了安全性方案,系统起来后不自动启动ftp,telnet,http等服务了,请问我该如何设置才让他们都起来呀?
  • Gtk+与Qt谁学起来更容易?
  • apache启动不起来了
  • 安装VisualAge3.5后运行不起来
  • Apache 1.3.20和Tomcat 4能否结合起来?
  • 急!到底要多少内存WS+DB2才能跑起来?
  • 欢迎大家一起来讨论:集群在J2EE中的实现。
  • EJB调试起来好麻烦,请问各位有什么高招?
  • 把Resin+IIS结合起来使用以后,
  • 高分求教!!!!如何将数据库的查询结果组合起来?
  • 怎么把JTextField和JButton联系起来?????????
  • 如何将几个文件编译起来
  • solaris下如何把weblogic和apache的服务做成随开机自动起来,急急急!
  • 装好linux后,感觉里面的字体看起来好不爽..请问怎么改为像windows一样
  • Red Had Enterprise linux AS 4 上的 vsftpd 开不起来?
  • Linux系统刚启动起来的时候为什么会阻塞一下?
  • fedora core 6上的samba配不起来,求助
  • linux下QQ用不起来?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3