zoukankan      html  css  js  c++  java
  • Java-如何去掉JFrame上的最大化最小化和关闭按钮(转)


    在JDK1.4以前,我们只有一种方式来去掉窗口的标题栏,那就是直接使用JWindow,用JWindow来代替JFrame使用。但用过JWindow的人一定知道,JWindow在操作系统的任务栏是不可见的,这样我们就无法在几个视窗之间来切换到这个窗口了。

    使用JWindow也是很多人知道的一种去掉标题栏的方式。但从Java1.4开始,有一种新的方式可以使用,我们来看看。

    现在我们创建一个类并继承于JFrame, 
    public class DecoratedFrame extends JFrame { 
    public DecoratedFrame() { 
      this.getContentPane().add(new JLabel("Just a test.")); 
      this.setUndecorated(true); // 去掉窗口的装饰 
      this.getRootPane().setWindowDecorationStyle(JRootPane.NONE); //采用指定的窗口装饰风格 
      this.setSize(300,150); 

    public static void main(String[] args) { 
      JFrame frame = new DecoratedFrame(); 
      frame.setVisible(true); 

    }

    请看加了注释的两行,要去掉标题栏,关键代码就是这两行,第1行去掉窗口的装饰,第2行为窗口指定头饰风格。在这里,可以通过调用this.getRootPane().setWindowDecorationStyle()方法为窗口指定以下的装饰风格:

    NONE                  无装饰(即去掉标题栏) 
    FRAME                普通窗口风格 
    PLAIN_DIALOG          简单对话框风格 
    INFORMATION_DIALOG    信息对话框风格 
    ERROR_DIALOG          错误对话框风格 
    COLOR_CHOOSER_DIALOG 拾色器对话框风格 
    FILE_CHOOSER_DIALOG  文件选择对话框风格 
    QUESTION_DIALOG      问题对话框风格 
    WARNING_DIALOG        警告对话框风格


    在使用Jframe的时候,普遍都会有标题栏,还有最小化,最大化,关闭按纽的,还要实现拖动窗体的功能。 
    这样的话,对我们实现自定义样式的窗体是很有影响的,


    1) 要去掉标题栏: 
    jFrame.setUndecorated(true); 
    // 这样就可以去掉Jframe中对window的装饰了,


    2) 去掉标题栏,我们就有可能要给程序写代码提供最小化,最大化,关闭的操作,如何实现? 
    只要给按纽添加MouseListener, 
    在mouseClick中的调用


    jFrame.setExtendedState(jFrame.ICONIFIED); //最小化


    if(jFrame.getExtendedState() != jFrame.MAXIMIZED_BOTH) 
    jFrame.setExtendedState(jFrame.MAXIMIZED_BOTH); 
    else 
    jFrame.setExtendedState(jFrame.NORMAL); 
    // 最大化或正常状态


    System.exit(0); 
    // 关闭,退出程序


    3) 要拖动窗体的功能: 
    只要给窗体中的某个组件添加如下代码就行了:

      Point loc = null;
      Point tmp = null;
      boolean isDragged = false;
        private void setDragable() {
          this.addMouseListener(new  java.awt.event.MouseAdapter() {
              public void  mouseReleased(java.awt.event.MouseEvent e) {
                  isDragged =  false;
                  jFrame.setCursor(new  Cursor(Cursor.DEFAULT_CURSOR));
              }
              public void  mousePressed(java.awt.event.MouseEvent e) { 
                tmp = new  Point(e.getX(), e.getY());
                  isDragged = true;
                  jFrame.setCursor(new Cursor(Cursor.MOVE_CURSOR));
              }        });
          this.addMouseMotionListener(new  java.awt.event.MouseMotionAdapter() { 
              public void  mouseDragged(java.awt.event.MouseEvent e) {
                  if(isDragged)  {
                      loc = new Point(jFrame.getLocation().x + e.getX() -  tmp.x,                    jFrame.getLocation().y + e.getY() -  tmp.y);
                      jFrame.setLocation(loc);
                  }
              }
          });

    在初始化该组件的时候调用 setDragable()  就可以使组件具体拖放窗体的功能了。因为可能有背景图,可能会重写paint方法,不能在paint方法中调用setDragable()

    http://www.linuxidc.com/Linux/2013-08/89321.htm

  • 相关阅读:
    C#里partial关键字的作用
    Xamarin.Android之布局文件智能提示问题
    C语言文件操作
    CArray
    Unicode和多字节的相互转换
    可变参数问题研究
    VC6.0支持UNICODE的步骤
    Unicode编码表
    @@
    内存映射文件原理
  • 原文地址:https://www.cnblogs.com/softidea/p/5139441.html
Copyright © 2011-2022 走看看