【问题标题】:JPanel button is not at the correct placeJPanel 按钮不在正确的位置
【发布时间】:2017-12-31 06:10:37
【问题描述】:

我为桌面应用程序制作了一个自定义 JFrame,并在应用程序的最顶部添加了一个 JPanel 作为标题框的替代品。问题是当我添加一个按钮时,它位于 JPanel 的中间,而不是通常的左上角。即使我将它设置在不同的位置,它也不会移动。 这是代码:

        JFrame f = new JFrame("Hello");
        f.setResizable(true);
        JPanel pa = new JPanel();
        JButton btn = new JButton("Exit");

        btn.setBackground(Color.white);
        btn.setText("Button");
        btn.setSize(300, 80);
        btn.setLocation(50, 0);

        pa.setBackground(Color.red);
        pa.setPreferredSize(new Dimension(width,60));
        pa.add(btn);

        f.setBackground(Color.white);
        f.setUndecorated(true);
        f.getContentPane().add(pa, BorderLayout.NORTH);
        f.setSize(new Dimension(width,height));
        f.setLocation(200, 200);
        f.setVisible(true);

【问题讨论】:

  • 您所说的“通常的左上角”是指“通常的”,如“您期望它去的地方”还是“您以前见过 Swing 放置的地方”?如果是前者,请按照 Axel 的建议阅读 Swing 文档(以及 menu 文档,如果这就是您要创建的内容)。如果是后者,一个按您预期工作的组件示例将有助于进行比较。

标签: java swing layout layout-manager


【解决方案1】:

您在框架中使用BorderLayout。您可以在面板中执行相同的操作。

pa.setLayout(new BorderLayout());
pa.add(btn, BorderLayout.WEST);

一般来说,setLocation 倾向于对抗布局管理器,因此您通常不想使用它,除非您要手动定位所有内容。

【讨论】:

  • 这是一种方法,但 BorderLayout 方法不是很好的方法,因为我还想在它旁边添加另一个按钮。
【解决方案2】:

这是一种方法,但BorderLayout 方法不是很好的方法,因为我还想在它旁边添加另一个按钮。

那么这可能需要使用FlowLayout.LEADING 作为对齐方式的FlowLayout。

但作为一般提示:

  1. 以最小尺寸提供 ASCII 艺术或 GUI 的 预期 布局的简单绘图(显示 所有 组件),如果可调整大小,则具有更大的宽度和高度 -显示应该如何使用额外的空间。
  2. 如需尽快获得更好的帮助,请发布您的尝试 Minimal, Complete, and Verifiable example 或Short, Self Contained, Correct Example。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    • 2014-08-23
    相关资源
    最近更新 更多