java - 使用未修饰的 JFrame 时如何添加对调整大小的支持?

标签 java swing resize customization jframe

我想自定义我的标题栏、最小化、最大化和关闭按钮。所以我在 JFrame 上使用了 setUndecorated(true);,但我仍然希望能够调整窗口大小。实现它的最佳方法是什么?

我在 RootPane 上有一个边框,我可以在边框或 RootPane 上使用 MouseListeners。有什么建议吗?

import java.awt.Color;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.border.LineBorder;

public class UndecoratedFrame extends JFrame {

    private LineBorder border = new LineBorder(Color.BLUE,2);
    private JMenuBar menuBar = new JMenuBar();
    private JMenu menu = new JMenu("File");
    private JMenuItem item = new JMenuItem("Nothing");

    public UndecoratedFrame() {
        menu.add(item);
        menuBar.add(menu);
        this.setJMenuBar(menuBar);
        this.setUndecorated(true);
        this.getRootPane().setBorder(border);
        this.setSize(400,340);
        this.setVisible(true);
    }

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

最佳答案

如您所说,您的根 Pane 上有边框。因此,至少有一个位置(在绘制边框的位置下方)根 Pane 是最上面的组件。因此,您可以将其添加为鼠标监听器和鼠标运动监听器。

当您的根 Pane 被单击(并按下鼠标按钮)时,您的鼠标和 Action 监听器将通知您初始和实际的鼠标位置。因此,您可以更新两个值之间的偏移量的帧大小,使您的帧可调整大小。

关于java - 使用未修饰的 JFrame 时如何添加对调整大小的支持?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2780780/

相关文章:

java - LDAP searchFilter samAccountName 来自用户输入定义的变量? java JNDI。有人知道该怎么做吗?

java - GlassFish 4.0 CDI 部署失败 + Apache Spark

java - 在 JTable 列中显示多行文本

java - 使用jquery调用soap wsdl

java - 在 Groovy/Java 中比较两个 XML 字符串/文件

java - 使用 setText 时,html 模式下的 JEditorPane 会减少最后一个空白区域

Java Swing 循环运行多个模拟

C++ list.unique() 会调整列表的大小吗?

c# - 如何在运行时调整网格上 WPF 控件的大小(保持纵横比)

javascript - 如何使用 javascript 使用户的 View 居中