1. 程式人生 > >Java JFrame隱藏標題欄以及最大化最小化關閉和拖動

Java JFrame隱藏標題欄以及最大化最小化關閉和拖動

CSDN上第一篇部落格,請大家多多支援!
// 轉載請註明出處!
直入主題吧,目前主流的軟體,圖形化介面一般都沒有標題欄,優點是簡單大方。然而,介面的最大化最小化和關閉按鈕也隨之隱藏,窗體也無法拖動。因此,我總結了一些解決這些問題的思路,僅供大家分享。
自定義標題欄效果圖

一. 最大化,最小化和關閉
在隱藏標題欄後,可以自定義三個按鈕,分別為最大化,最小化和關閉,並分別新增事件監聽器。

b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);

//監聽器裡的程式碼
setExtendedState(JFrame.MAXIMIZED_BOTH);//窗體長寬分別最大化
setExtendedState(JFrame.NORMAL); //窗體最大化後恢復預設尺寸 setExtendedState(JFrame.ICONIFIED); //窗體最小化 System.exit(0); // 關閉,當然也可以dispose()

二,拖動窗體
隱藏標題欄後,窗體無法拖動,確實是讓人非常頭痛。拖動的方法有很多,思路基本是一致的,記錄下點選滑鼠時的座標,以及拖拽後的座標,這個偏移量就是我們拖動窗體的關鍵。

addMouseListener(new MouseAdapter() 
        {
            public void mousePressed
(MouseEvent e) { /* * 獲取點選滑鼠時的座標 */ mouseAtX = e.getPoint().x; mouseAtY = e.getPoint().y; } }); addMouseMotionListener(new MouseMotionAdapter() { public
void mouseDragged(MouseEvent e) { setLocation((e.getXOnScreen()-mouseAtX),(e.getYOnScreen()-mouseAtY));//設定拖拽後,視窗的位置 } });

以下是包含這些功能的程式碼,希望對大家有所幫助。

package tt;

import java.awt.Color;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;



public class UnTitleFrame extends JFrame implements ActionListener
{

    Toolkit toolkit = Toolkit.getDefaultToolkit();

    // 設定窗體預設大小,使其適應螢幕大小
    private int DEFAULE_WIDTH = (int) (toolkit.getScreenSize().getWidth() * 0.4);
    private int DEFAULE_HEIGH = (int) (toolkit.getScreenSize().getHeight() * 0.5);

    // 設定窗體位置,使其在螢幕居中
    private int Location_x = (int) (toolkit.getScreenSize().getWidth() - DEFAULE_WIDTH) / 2;
    private int Location_y = (int) (toolkit.getScreenSize().getHeight() - DEFAULE_HEIGH) / 2;

    int mouseAtX = 0;
    int mouseAtY = 0;

    private JButton b2;

    public UnTitleFrame()
    {
        setUndecorated(true);//設定窗體的標題欄不可見

        /*
         * 設定窗體可拖動
         */
        addMouseListener(new MouseAdapter() 
        {
            public void mousePressed(MouseEvent e) 
            {
                /*
                 * 獲取點選滑鼠時的座標
                 */
                mouseAtX = e.getPoint().x;
                mouseAtY = e.getPoint().y;
            }
         });      
          addMouseMotionListener(new MouseMotionAdapter()
          {
              public void mouseDragged(MouseEvent e) 
              {
                  setLocation((e.getXOnScreen()-mouseAtX),(e.getYOnScreen()-mouseAtY));//設定拖拽後,視窗的位置
              }
          });

        /*
         * 例項化簡單元件
         */
        JButton b1 = new JButton("最小化");
        b2 = new JButton("最大化"); 
        JButton b3 = new JButton("關閉");

        b1.addActionListener(this);
        b2.addActionListener(this);
        b3.addActionListener(this);

        b3.setBounds(DEFAULE_WIDTH-90,0,90,45);
        b2.setBounds(DEFAULE_WIDTH-185,0,90,45);
        b1.setBounds(DEFAULE_WIDTH-280,0,90,45);

        JLabel label = new JLabel("無邊框窗體的演示",JLabel.CENTER);
        label.setBounds(280,280,450,45);
        label.setFont(new Font("華文新魏", Font.BOLD,40));

        JPanel contentPane = new JPanel();
        contentPane.setBackground(Color.GRAY);
        contentPane.setLayout(null);

        contentPane.add(b1);
        contentPane.add(b2);
        contentPane.add(b3);
        contentPane.add(label);


        setContentPane(contentPane);//設定ContentPane
        setSize(DEFAULE_WIDTH,DEFAULE_HEIGH);// 設定窗體預設大小,使其適應螢幕大小
        setLocation(Location_x, Location_y);//設定窗體在螢幕中的位置
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true); //設定窗體可見

    }

    public static void main(String[] args)
    {
        new UnTitleFrame();
    }


    public void actionPerformed(ActionEvent e) 
    {
        if(e.getActionCommand() == "最大化")
        {
                setExtendedState(JFrame.MAXIMIZED_BOTH); 
                b2.setText("正常化");
        }

        if(e.getActionCommand() == "正常化")
        {
                setExtendedState(JFrame.NORMAL); 
                b2.setText("最大化");

        }

        if(e.getActionCommand() == "最小化")
        {
            setExtendedState(JFrame.ICONIFIED); 
        }


        if(e.getActionCommand() == "關閉")
        {
            System.exit(0);
        }

    }

}

怎麼樣,si不si對你有所幫助,支援原創,盡情點贊,評論,轉載和關注吧。