sách gpt4 ai đã đi

java - Oracle Java 教程中的 AbsoluteLayoutDemo.java

In lại 作者:行者123 更新时间:2023-12-01 12:06:10 25 4
mua khóa gpt4 Nike

问题 1:

我正在编写一个程序来使用绝对布局,因为我需要在运行时重新定位 JLabel 。我尝试理解以下 Java 演示程序(来自 Oracle Java 教程):

http://docs.oracle.com/javase/tutorial/displayCode.html?code=http://docs.oracle.com/javase/tutorial/uiswing/examples/layout/AbsoluteLayoutDemoProject/src/layout/AbsoluteLayoutDemo.java

它建议如下:

//Size and display the window.
Insets insets = frame.getInsets();
frame.setSize(300 + insets.left + insets.right, 125 + insets.top + insets.bottom);
frame.setVisible(true);

在计算 insets 值之前,框架未设置为可见,因此它们都是 0(零),我说得对吗?

我尝试使用 frame.setSize(300, 125); 替换代码,Eclipse 给出了相同的结果(与我观察到的窗口大小相同)。在 setVisible 之前设置 setSize 是否错误?

问题2:

在我自己的程序中,我有以下代码段:

JFrame frame = new JFrame();
JPanel panel = new JPanel();
JLabel moving_label = new JLabel();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
panel.setLayout(null);
frame.add(panel);
panel.add(moving_label);
moving_label.setBounds(150, 150, 50, 50);
moving_label.setIcon(img);
frame.setVisible(true);
frame.setBounds(100, 100, 300+frame.getInsets().left+frame.getInsets().right,
300+frame.getInsets().top+frame.getInsets().bottom);
//I don't need to have panel.validate() or panel.repaint(), right?

a) 上述代码段的顺序是否正确(我是java Swing GUI的新手)?

b) 我在 MacBook Pro 上使用 Eclipse 来运行 Java 程序。我在 JFrame của JPanel 中有 40 个 JLabel(每个都有一个 ImageIcon)。如果我使用上面的代码生成GUI,则在显示窗口后需要半秒才能显示所有JLabel。为什么 JLabels 不在显示窗口的同时显示?

任何帮助将不胜感激。非常感谢您的宝贵时间:)

1 Câu trả lời

The frame is not set to be visible before the insets values are calculated, so they are all 0 (zero), am I getting it right?

正确,在框架实现之前,组件没有大小,这意味着您正在运行的操作系统上的 native 对象已经创建。当您 pack() 框架或使框架可见时,就会完成此操作。

如果您尝试使包含标签的面板尺寸为 (300, 125),那么更简单的方法是:

JPanel panel = new JPanel();
panel.setPreferredSize( new Dimension(300, 125) );
panel.add(...);
frame.add( panel );
frame.pack();
//frame.setLocation(...);
//frame.setLocationByPlatform();
frame.setVisible( true );

现在 pack() 方法将根据添加到框架的所有组件的首选大小来确定框架的大小。无需担心插图。

注意:作为一般规则,您不应在组件上调用 setPreferredSize(),因为每个组件负责确定自己的大小。

关于java - Oracle Java 教程中的 AbsoluteLayoutDemo.java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27580842/

25 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com