如何在JFrame上将一个对象放置在特定的位置(x,y)?

6

如何将一个对象放置在JFrame上的特定位置(x,y)?

4个回答

10

在这里找到绝对定位教程。 请仔细阅读,了解为什么这种方法比使用布局管理器更不被鼓励。

如果要向JPanel添加一个JButton,可以使用以下代码:

JButton button = new JButton("Click Me");
button.setBounds(5, 5, 50, 30);
panel.add(button);

这里有一个示例程序,请尝试:

import java.awt.*;
import javax.swing.*;

public class AbsoluteLayoutExample
{
    private void displayGUI()
    {
        JFrame frame = new JFrame("Absolute Layout Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel contentPane = new JPanel();
        contentPane.setOpaque(true);
        contentPane.setBackground(Color.WHITE);
        contentPane.setLayout(null);

        JLabel label = new JLabel(
            "This JPanel uses Absolute Positioning"
                                    , JLabel.CENTER);
        label.setSize(300, 30);
        label.setLocation(5, 5);

        JButton button = new JButton("USELESS");
        button.setSize(100, 30);
        button.setLocation(95, 45);

        contentPane.add(label);
        contentPane.add(button);

        frame.setContentPane(contentPane);
        frame.setSize(310, 125);
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String... args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                new AbsoluteLayoutExample().displayGUI();
            }
        });
    }
}

绝对定位输出


这个“pane”是什么?我可以用JPanel代替吗? - whiteberryapps
@user1441845:一定要看这个最新的编辑,它展示了如何与JPanel一起使用 :-) 我之前忘记告诉你,你需要写panel.setLayout(null),虽然我现在在这个代码示例中提到了它 :-) - nIcE cOw
需要使用Insets来进行AbsoluteLayout布局,不确定Bounds是否是正确的方法。+1 - mKorbel
@mKorbel:在我看来,setBounds()可用作setSize()/setLocation()的快捷方式。我们可以使用setBounds()而不是使用它们,因为第1个参数是X轴,第2个参数是Y轴,第3个参数是宽度,第4个参数是高度。 - nIcE cOw
1
@nIcE cOw 是一个快捷方式 :-) :-) :-) :-) :-) - mKorbel
@user1441845:啊哈,根据@mKorbel的新评论,我才意识到他说得太对了,确实要使用setSize(width, height)setLocation(x, y)将组件放置在指定的坐标上。所以我相应地编辑了我的答案 :-) - nIcE cOw

3

尝试将这两种方法组合使用:setLocation()setBounds()

更好的方法是使用由NetBeans团队在2005年开发的GroupLayout。WindowsBuilder Pro是一个很好的Java GUI构建工具。


+1,希望我能掌握GroupLayout,毫无疑问是最好的布局管理器之一。 - nIcE cOw
1
@nIcEcOw:在NetBeans GUI编辑器中进行调试并检查生成的代码是尝试使用GroupLayout的一种方式。 - trashgod
@trashgod:有趣的想法,拖放到IDE上,以实验和玩弄代码的方式,这是通常的方法。这是一个很棒的建议,谢谢 :-) - nIcE cOw

2

+1,我在其他地方看过这个教程,只是想不起来在哪里了 :-) - nIcE cOw

2
在继承框架的类中:
setLayout(null); 

在你的组件中:
setLocation(x,y);

注意事项:1)您需要设置JFrame的contentPane的布局,而不是JFrame本身。2)如果容器的布局为null,则编码者完全负责添加的组件的位置和大小。3)您应该加入一个关于避免使用null布局和绝对定位的警告。 - Hovercraft Full Of Eels
@HovercraftFullOfEels:太准了!我错过了那个JFrame部分,你轻而易举地抓住了它 :-) - nIcE cOw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接