天天看點

java-如何去掉JFrame上的最大化最小化和關閉按鈕 java-如何去掉JFrame上的最大化最小化和關閉按鈕

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