【问题标题】:Anchor the lone component in a JFrame在 JFrame 中锚定单独的组件
【发布时间】:2013-08-23 09:52:30
【问题描述】:

我的 JFrame 中有一个 JLabel,最初使用 pack() 显示。

我的问题是,每当我尝试调整窗口大小时,JLabel 也会移动(取决于调整窗口的哪一侧),这主要是由于 JFrame 的布局。

更具体地说,每当我向上/向下调整窗口大小时,JLabel 都会保持居中。我希望不是这样。

如果我的问题令人困惑,我很抱歉。如果需要,我很乐意提供图表。

public class JavaApplication8 {

    public static void main(String[] args) throws MalformedURLException {
        // TODO code application logic here

        JFrame window = new JFrame("test");

        URL bgURL = new URL("https://si0.twimg.com/profile_images/3585146044/3b695fa73490227f792fa4e46d4a7a57.jpeg");
        ImageIcon bg = new ImageIcon(bgURL);

        JLabel label = new JLabel(bg);

        window.add(label, BorderLayout.CENTER);

        window.pack();
        window.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        window.setLocationRelativeTo(null);
        window.setVisible(true);

    }   
}

【问题讨论】:

  • 您希望它在哪里?此外,它没有移动,而是放大了(假设您使用的是BorderLayout)。
  • SSCCE 比图表更有用。
  • @brano88:我只显示一个 JLabel,所以我认为位置不是问题(除了设置为 pack() 的窗口。
  • 那你要达到什么目的呢?
  • @brano88:我提供了一个 SSCCE。请注意,如果您使用南边界调整窗口大小,则整个图像会向上移动一点。如果我想隐藏她的下半身(仅使用南调整大小)但仍然看到脸怎么办?我想我让这变得比它应该的更复杂。

标签: java swing resize jframe layout-manager


【解决方案1】:

使用不同的布局管理器:

window.setLayout(new FlowLayout());

对于这个例子就足够了。

如果您想继续使用BorderLayout,另一种可能性是将标签放在不同的位置:

window.add(label, BorderLayout.NORTH);

还请注意,您只能从 event dispatch thread 访问 swing 组件。

【讨论】:

  • 我实际上已经使用过这个,但这删除了东部调整大小边框的曾经的功能。每当我使用东边调整图像大小时,它都会向一侧移动一点。
  • @user2280704 我不知道你到底想要什么,但window.setLayout(new FlowLayout(FlowLayout.LEADING)) 将图像保留在左上角。
猜你喜欢
  • 1970-01-01
  • 2014-04-29
  • 1970-01-01
  • 1970-01-01
  • 2015-02-27
  • 2020-05-12
  • 1970-01-01
  • 1970-01-01
  • 2020-01-23
相关资源
最近更新 更多