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()


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章