Java JFrame隱藏標題欄以及最大化最小化關閉和拖動
阿新 • • 發佈:2018-12-31
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對你有所幫助,支援原創,盡情點贊,評論,轉載和關注吧。