900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Java JFrame隐藏标题栏以及最大化最小化关闭和拖动

Java JFrame隐藏标题栏以及最大化最小化关闭和拖动

时间:2024-07-15 18:11:45

相关推荐

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);//设置ContentPanesetSize(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对你有所帮助,支持原创,尽情点赞,评论,转载和关注吧。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。