在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

Java-如何去掉JFrame上的最大化最小化和关闭按钮(转)的更多相关文章

  1. PyQt:无边框自定义标题栏及最大化最小化窗体大小调整

    环境 Python3.5.2 PyQt5 陈述 隐藏掉系统的控制栏,实现了自定义的标题控制栏,以及关闭/最大化/最小化的功能,自由调整窗体大小的功能(跟随一个大佬学的),代码内有详细注释 只要把Mai ...

  2. Electron 无边框窗口最大化最小化关闭功能

    Electron 无边框窗口最大化最小化关闭功能 目的 实现无边框窗口,并添加最大化最小化和关闭功能 前提 了解Electron 主进程和渲染进程的通讯 了解 BrowserWindow相关功能 操作 ...

  3. c# 窗体相关操作(最大化/最小化/关闭/标题栏)

    /// <summary> /// 窗体跟随鼠标移动的标记 /// </summary> private bool normalmoving = false; /// < ...

  4. 【转】ubuntu 12.04 LTS将关闭最大化最小化移动到右上角

    原文网址:http://www.4byte.cn/learning/114801.html ubuntu 12.04 LTS将关闭最大化最小化移动到右上角   还是按下“ALT +F2”组合键,输入g ...

  5. WPF编程,窗体最大化、最小化、关闭按钮功能的禁用

    原文:WPF编程,窗体最大化.最小化.关闭按钮功能的禁用 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/article/detail ...

  6. C#程序实现窗体的最大化/最小化

    C#程序实现窗体的最大化/最小化 http://blog.csdn.net/jiangqin115/article/details/41251215 private void button1_Clic ...

  7. delphi ,1)控件根据窗口大小,一直居中显示 2)显示最大化最小化按钮控件

    一.控件根据窗口大小,一直居中显示 1)onResize:当窗体尺寸改变时发生 例子:如何使控件随窗口的放大和缩小动态改变自己的大小,使控件“保存.返回”在窗口变大变小中随着变. 在Panel调用 p ...

  8. layer满屏/禁止最大化最小化 可以做选择框使用

    1.layer弹窗最大化 var index=layer.open(); layer.full(index); 2.layer禁止最大化最小化 layer.open( [ type:2, title: ...

  9. Qt 窗口操作函数(置顶、全屏,最大化最小化按钮设置等)

    一.窗口置顶 与 取消置顶 void MainWindow::on_windowTopButton_clicked() { if (m_flags == NULL) { m_flags = windo ...

随机推荐

  1. windows phone 墓碑化(9)

    原文:windows phone 墓碑化(9) 几个术语的理解: 名称 说明 ;        App ap = (App)Application.Current;        // 构造函数    ...

  2. hdu2175汉诺塔IX

    汉诺塔IX Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  3. CentOS7+Tomcat 生产系统部署

    1 准备OS账户 安全起见,本着最小权限原则,生产系统决不同意使用root账户来执行tomcat.为此,建立新账户tomcat,并设定登录password. useradd tomcat passwd ...

  4. swift-辞典NSDictionary定义,变化的关键,删/加入关键

    // Playground - noun: a place where people can play import UIKit //--------------------------------- ...

  5. hdu1978--How many ways(内存搜索)

    How many ways Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  6. Sencha Architect 2 的使用

    俗话说的好, 工欲善其事必先利其器, 用Sencha开发的语言, 自己可能不太熟悉, 写出来很麻烦, 于是给大家介绍一个工具. 启动程序第一个界面: 单击第一个Go按钮, 创建一个项目.进入以后, 单 ...

  7. WPF 3D:MeshGeometry3D的定义和光照

    原文 WPF 3D:MeshGeometry3D的定义和光照 由于WPF计算光照会根据整个平面的方向向量,所以如果在不同面上使用同一个点可能会达到不同的光照效果.让我们用不同的定义Mesh的方法来演示 ...

  8. 如何利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等(转)

    你是否曾经有过要计算一个非常大的数据(几百GB)的需求?或在里面搜索,或其它操作——一些无法并行的操作.数据专家们,我是在对你们说.你可能有一个4核或更多核的CPU,但我们合适的工具,例如 grep, ...

  9. 20140719中国互联网公司市值排名TOP20

    近期在找工作.关注了一下中国互联网公司的市值,实际情况跟想象的区别非常大. 比方异军突起的小米.京东.唯品会.聚美优品. 比方乐视网由于政策原因,市值两日缩水10亿$.停牌了. 搜房网市值90天蒸发3 ...

  10. A WPF/MVVM Countdown Timer

    Introduction This article describes the construction of a countdown timer application written in C# ...