首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将JLabel的位置添加到JPanel中

将JLabel的位置添加到JPanel中
EN

Stack Overflow用户
提问于 2014-11-20 10:56:53
回答 1查看 78关注 0票数 0

我正在开发一个Java应用程序。

我正在添加一些标签后,设置了框架,并使它可见。我还在JPanel上调用了JPanel,并在其上添加了标签。

但是,并非所有的标签都返回正确的位置。

这是我的密码。

代码语言:javascript
复制
public class Test {

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

        JScrollPane scrollPane = new JScrollPane();     
        JPanel view = new JPanel();
        view.setLayout(new MigLayout());
        scrollPane.setViewportView(view);
        frame.setContentPane(scrollPane);

        frame.setSize(800, 600);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

        List<JComponent> labels = update(view);

        printLocations(labels);
    }

    public static List<JComponent> update(JPanel view) {
        view.removeAll();

        List<JComponent> labels = new ArrayList<>();

        for (int i = 0; i < 10; i++) {
            JLabel label = new JLabel("Label " + i);
            view.add(label);
            labels.add(label);
        }

        view.revalidate();
        view.repaint();

        return labels;
    }

    private static void printLocations(List<JComponent> labels) {
        for (JComponent label : labels) {
            System.out.println(label.getLocation());
        }
    }

}

这是输出:

代码语言:javascript
复制
java.awt.Point[x=7,y=7]
java.awt.Point[x=52,y=7]
java.awt.Point[x=97,y=7]
java.awt.Point[x=0,y=0]
java.awt.Point[x=0,y=0]
java.awt.Point[x=0,y=0]
java.awt.Point[x=0,y=0]
java.awt.Point[x=0,y=0]
java.awt.Point[x=0,y=0]
java.awt.Point[x=0,y=0]

在此代码中,如果在更新和打印组件位置之间添加一些延迟,所有组件都会返回正确的位置。但是,在我的申请中,即使是延迟也不起作用!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-20 11:08:59

结果,我们必须在根组件上调用revalidate()。然后,这个问题就解决了。

在本例中,根组件是frame。因此,代码如下:

代码语言:javascript
复制
public class Test {

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

        JScrollPane scrollPane = new JScrollPane();     
        JPanel view = new JPanel();
        view.setLayout(new MigLayout());
        scrollPane.setViewportView(view);
        frame.setContentPane(scrollPane);

        frame.setSize(800, 600);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

        List<JComponent> labels = update(view);

        frame.revalidate();

        printLocations(labels);
    }

    public static List<JComponent> update(JPanel view) {
        view.removeAll();

        List<JComponent> labels = new ArrayList<>();

        for (int i = 0; i < 10; i++) {
            JLabel label = new JLabel("Label " + i);
            view.add(label);
            labels.add(label);
        }

        view.repaint();

        return labels;
    }

    private static void printLocations(List<JComponent> labels) {
        for (JComponent label : labels) {
            System.out.println(label.getLocation());
        }
    }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27037867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档