0

我正在使用 Eclipse 和 Google 的 WindowBuilder Pro 插件来设计一个摇摆应用程序。我已经使用组布局及其组件构建了功能齐全的 JFrame。我现在正在尝试将图像添加到所有 JFrame 的角落。当我尝试从 WindowBuilder Pro 插件中拖放时,所有组件和 JFrame 本身都会移动和调整大小。

有没有办法以编程方式或拖放方式将这些图像放置在我框架的角落并将它们锚定在那里,以便在 JFrame 调整图像大小时保持在它们各自的角落?

我尝试过的程序代码:

BufferedImage image = ImageIO.read(getClass().getResource("image path"));
JLabel label = new JLabel(new ImageIcon(image));
label.setBounds(0,0,100,100);
add(label);

这适用于左上角,但我似乎无法弄清楚如何将其他图像锚定到其他角落。

先谢谢了!!!

编辑:我希望所有现有组件都保留在原处,并将图像嵌入到所有现有组件后面的 JFrame 角落。

4

3 回答 3

2

不要使用空布局和 setBounds() !!!使用适当的布局管理器。

例如,JFrame 的默认布局管理器是 BorderLayout。因此,您可以创建第二个 JPanel,它也使用 BorderLayout。然后您可以将图像添加到面板的 WEST 和 EAST。然后将面板添加到框架的北部。

有关详细信息,请参阅如何使用边框布局。实际上,请阅读有关布局管理器的整个部分。

于 2013-04-26T19:35:01.203 回答
0

您可以计算角坐标;基本概念是依靠组件的宽度/高度;例如 :

x,y - 坐标

w,h - 角分量比例

让我们计算一些角落的坐标......

左上角:x=0;y=0;w=100;h=100;

右上角:x=parentComponent.width-w;y=0;w=100;h=100;

右下角:x=parentComponent.width-w;y=parentComponent.height-h;w=100;h=100;

...因此,如您所见,您可以将 alg 基于父组件的宽度/高度;在你的情况下,它就像一个代码

label.getParent();

报告是否有帮助

于 2013-04-26T19:33:57.203 回答
0

如果您正在使用setBounds方法,您可能需要知道您给标签componentListener的位置是最终位置,并且在添加到框架和调用方法之前无法更改componentResized,每次调整框架大小时都必须设置新位置对于标签。

然而,这不是解决这个问题的最佳方式,我告诉你不要使用这种方式,希望其他人(或专家)给出另一个更好的答案。

但无论如何,看这个例子是不可能的:

    private JLabel lable ;
    private Icon img;
   // default constructor 
    public AnchoreImage(){

        setVisible(true);
        setDefaultCloseOperation(3);

        img = new ImageIcon(AnchoreImage.class.getClass().getResource("/path to image"));
        lable = new JLabel("text",img, JLabel.LEADING);
        lable.setBounds(getWidth()-img.getIconWidth(), 20, img.getIconWidth(),img.getIconWidth());
        add(lable);
        addComponentListener(new ComponentAdapter() {

            @Override
            public void componentResized(ComponentEvent e) {
                lable.setLocation(getWidth()-(img.getIconWidth()+20), 20);
            }
        });
        pack();
        setSize(400,400);
        setLayout(null);
    }
于 2013-04-26T19:35:20.343 回答