以导入的png为中心

时间:2018-11-02 15:39:41

标签: java swing label png

基本上我还是Java的新手,并且在另一个上导入了一个简单的png,这对我自己是一个概念证明,我认为这是非常非正式的编码。尽管如此,我不知道如何移动第二个png,因为一旦应用程序打开,第二个png就会自动位于左上角的(0,0,0)

public class DisplayImage extends JFrame {

    public DisplayImage() {
        initUI();
    }

    private ImageIcon loadImage() {
        ImageIcon ii = new ImageIcon("/Users/980057130/Desktop/pixil-frame-0.png");
        return ii;
    }

    private ImageIcon loadImage1() {
        ImageIcon iii = new ImageIcon("/Users/980057130/Desktop/Dynamic-Dungeon.png");
        return iii;
    }

    private void initUI() {                   
        ImageIcon ii = loadImage();
        ImageIcon iii = loadImage1();

        JLabel label = new JLabel(iii);
        JLabel label1 = new JLabel(ii);

        createLayout(label);
        createLayout(label1);

        label = new JLabel();

        Container contentPane = getContentPane();
        contentPane.add(new JScrollPane(label), "Center");

        setTitle("Dynamic Dungeon");
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
}

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

欢迎堆栈溢出并访问友好的Java社区。很少有关于这个的指针。如果您对绘制图像感兴趣,那么在画布上绘画可能是一种更好的方法。使用标签更适合于布局GUI的领域,当您这样做时,通常不会尝试在彼此之上绘制标签。

您可以查看此问题Drawing Canvas on JFrame

涉及到有人在画布上绘画,您可以尝试使用它来绘制图像。

答案 1 :(得分:0)

如果要将一个图像居中放置在另一个图像上,最简单的方法是让布局管理器为您完成此操作。

所以基本逻辑是:

JLabel foreground = new JLabel( new ImageIcon() );
JLabel background = new JLabel( new ImageIcon(...) );
background.setLayout( new GridBagLayout() );
background.add(foreground, new GridBagConstraints() );
JScrollPane scrollPane = new JScrollPane( background );
add(scrollPane, BorderLayout.CENTER);

在具有默认约束的情况下使用GridBagLayout时,添加的任何组件将自动在可用空间中居中。

请注意,JLabel并非真正设计为容器,因此,只有在前景图像小于背景图像时,此方法才有效。