Java 从JFrame中删除标题栏后保留边框

Java 从JFrame中删除标题栏后保留边框,java,swing,user-interface,jframe,Java,Swing,User Interface,Jframe,我想从JFrame中删除标题栏,所以我在该JFrame上调用setUndercorated(true),但我想保留该JFrame上的边框(漂亮的渐变),它在装饰打开时出现?我可以这样做吗?类似于为LookAndFeel默认设置边框实例,或者自己创建渐变边框?您可以通过创建JPanel并为其设置边框,然后将面板设置为框架内容,直观地完成此操作 public class Undecorated { public static void main(String[] args) { JFr

我想从JFrame中删除标题栏,所以我在该JFrame上调用setUndercorated(true),但我想保留该JFrame上的边框(漂亮的渐变),它在装饰打开时出现?我可以这样做吗?类似于为LookAndFeel默认设置边框实例,或者自己创建渐变边框?

您可以通过创建
JPanel
并为其设置边框,然后将面板设置为框架内容,直观地完成此操作

public class Undecorated {

  public static void main(String[] args) {
    JFrame frame = new JFrame();

    JPanel borderedPanel = new JPanel();

    //Use any border you want, eg a nice blue one
    borderedPanel.setBorder(BorderFactory.createMatteBorder(5, 5, 5, 5, Color.BLUE));

    frame.setContentPane(borderedPanel);
    frame.setUndecorated(true);
    frame.setSize(new Dimension(200, 200));
    frame.setVisible(true);
  }

}

通过创建
JPanel
并给它一个边框,然后将面板设置为框架的内容,您可以直观地实现这一点

public class Undecorated {

  public static void main(String[] args) {
    JFrame frame = new JFrame();

    JPanel borderedPanel = new JPanel();

    //Use any border you want, eg a nice blue one
    borderedPanel.setBorder(BorderFactory.createMatteBorder(5, 5, 5, 5, Color.BLUE));

    frame.setContentPane(borderedPanel);
    frame.setUndecorated(true);
    frame.setSize(new Dimension(200, 200));
    frame.setVisible(true);
  }

}

默认的系统LookAndFeel窗口边框是由系统绘制的,而不是由Java绘制的,因此无法单独从窗口中删除标题栏。你能做的唯一的事情就是自己去装饰你的窗口并绘制边框(是的,要完全复制系统边框,你需要投入大量的精力)


也许类似的东西可以在中使用,但要使用它,您必须放弃standart Swing。

默认的系统外观窗口边框是由系统绘制的,而不是由Java绘制的,因此无法仅从窗口中删除标题栏。你能做的唯一的事情就是自己去装饰你的窗口并绘制边框(是的,要完全复制系统边框,你需要投入大量的精力)


也许类似的东西可以在中使用,但要使用它,您必须放弃standart Swing。

听起来您想要吃蛋糕,也想要吃蛋糕。只需要一点(border):-)或获取默认border的实例,这在lookAndFeel中使用,所以我可以在禁用装饰后手动将其添加到JFrame中。装饰可能是由窗口管理器绘制的,而不是Java,因此可能很难精确地模拟它…听起来好像你想要吃蛋糕,也想要吃蛋糕。只需一点(边框):-)或获取默认边框的实例,这在lookAndFeel中使用,所以我可以在禁用装饰后手动将其添加到JFrame中。装饰可能是由窗口管理器而不是Java绘制的,所以可能很难精确地模拟它。。。