21xrx.com
2024-11-22 07:30:12 Friday
登录
文章检索 我的文章 写文章
Java Swing实现无边框窗口及自定义边框方案
2023-06-10 21:15:32 深夜i     --     --
Java JFrame 边框

使用Java Swing创建JFrame窗口时,默认情况下会有边框,但有时我们可能会想要去掉它来使窗口更加美观,这时就需要使用JFrame的setUndecorated()方法。

在创建JFrame时,我们可以在构造函数中添加一行代码:


frame.setUndecorated(true);

这会将窗口的整个边框去掉,但同时也使得窗口不能被拖拽、最大化或最小化。

如果只想去掉窗口的标题栏,但保留边框,则可以使用setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE)方法。


JFrame frame = new JFrame("无标题栏的窗口");

frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);

frame.setSize(500, 500);

frame.setVisible(true);

这里的JFrame.HIDE_ON_CLOSE参数指的是当窗口关闭时隐藏窗口。

除了使用上述方法,我们还可以自己实现窗口边框。这时我们需要继承JFrame类,并重写paint()方法、mousePressed()方法、mouseReleased()方法和mouseDragged()方法。


public class MyFrame extends JFrame {

  private int x, y;

  public MyFrame() {

    setSize(500, 500);

    setLayout(null);

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  }

  public void paint(Graphics g) {

    super.paint(g);

    g.drawRect(0, 0, getWidth() - 1, getHeight() - 1);

  }

  public void mousePressed(MouseEvent e) {

    x = e.getX();

    y = e.getY();

  }

  public void mouseReleased(MouseEvent e) {}

  public void mouseDragged(MouseEvent e) {

    int newX = e.getXOnScreen() - x;

    int newY = e.getYOnScreen() - y;

    setLocation(newX, newY);

  }

}

这里我们重写了paint()方法,绘制了一个矩形边框。在mousePressed()方法中保存当前鼠标的位置,然后在mouseDragged()方法中计算出窗口需要移动的坐标,最后使用setLocation()方法实现窗口移动。

以上就是窗口边框的几种实现方式,根据不同的需求,选择不同的方法来实现即可。

  
  
下一篇: 最新官网db

评论区

{{item['qq_nickname']}}
()
回复
回复