【问题标题】:How to place an object in a specific location (x,y) on a JFrame?如何将对象放置在 JFrame 上的特定位置(x,y)?
【发布时间】:2012-06-09 16:25:14
【问题描述】:

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

【问题讨论】:

    标签: java swing user-interface jframe


    【解决方案1】:

    在这里找到Absolute Positioning Tutorials。请仔细阅读,为什么不鼓励使用这种方法而不是使用 LayoutManagers

    要在你的 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();
                }
            });
        }
    }
    

    【讨论】:

    • 这个“窗格”是什么?我可以改用 JPanel 吗?
    • @user1441845 :请观看最新的编辑,如何将其与JPanel 一起使用 :-) 我之前忘了告诉你,你必须写panel.setLayout(null),尽管我已经提到过现在在这个代码示例中:-)
    • 对于AbsoluteLayout需要使用Insets,不确定Bounds是否正确+1
    • @mKorbel :恕我直言,setBounds() 用于代替 setSize()/setLocation() 作为快捷方式,我们可以使用 setBounds() 而不是使用它们,因为第一个参数是X 轴,Y 轴第 2 轴,WIDTH 第 3 轴,HEIGHT 第 4 轴。
    • @nIcE cOw 作为快捷方式 :-) :-) :-) :-) :-)
    【解决方案2】:

    试试这2个...结合在一起...

    setLocation()setBounds()

    使用NetBeans团队2005年开发的GroupLayout更好。WindowsBuilder Pro是Java构建GUI的好工具

    【讨论】:

    • +1,希望我能掌握 GroupLayout,无疑是最好的布局管理器之一
    • @nIcEcOw:修改 NetBeans GUI 编辑器并检查生成的代码是试验 GroupLayout 的一种方法。
    • @trashgod :有趣的想法,在 IDE 上拖放,以通常的方式试验和玩代码。这是一个很好的建议,谢谢:-)
    【解决方案3】:

    查看这个绝对布局代码示例:

    Absolute Layout demo

    【讨论】:

    • +1,我在其他地方看过这个教程,只是不记得在哪里 :-)
    【解决方案4】:

    在继承框架的类中:

    setLayout(null); 
    

    在您的组件中:

    setLocation(x,y);
    

    【讨论】:

    • 关注点:1)你需要设置JFrame的contentPane的布局,而不是JFrame本身。 2) 如果容器的布局为空,则编码器完全负责位置添加的组件的大小。 3) 你应该添加一个关于避免使用空布局和绝对定位的警告。
    • @HovercraftFullOfEels:牛眼!我错过了 JFrame 部分,你很容易就抓住了 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多