JButton 显示不正确:Eclipse
JButton not showing properly: Eclipse
Javs Swing Error
您可以在上图中看到代码和输出。我已将 Eclipse IDE 用于 Java swing。但是按钮没有按预期出现。我是 Java Swing 和 Eclipse 的新手,所以我不知道是否需要任何其他设置。请帮助我并提前致谢。
问题可能出在面板的布局管理器上,(如果您没有使用面板,则应该使用面板直接添加对象而不是框架),如果您使用布局管理器,它遵循一些规则在面板中定位对象。喜欢将布局管理器保持为 null,虽然 idk y 人们不喜欢你说布局管理器为 null 但如果你想使用绝对位置,setLayout(null);可以工作
您在问题中写道
I'm new ... to Java Swing
那我推荐你看教程Creating a GUI With JFC/Swing
不要调用方法 setBounds()
来放置您的组件 – 除非您没有使用布局管理器1,但根据您的代码,您正在使用布局管理器,因为您的代码 not 调用 frame.setLayout(null)
.
[内容窗格] JFrame
的默认布局管理器是 BorderLayout. Since your code does not use the add(Component, Object) 方法,用于将 JButton
和 JTextField
添加到 JFrame
,两个组件都添加到 CENTER 面板,因此绘制在另一个组件之上。 CENTER 面板也使其组件尽可能大。因此 JButton
占据了所有 JFrame
.
这是您的代码的重写,但我真的建议您花时间并努力完成整个教程 – 如果您认真学习 Swing .另请注意,在下面的代码中,我更改了那些不符合 Java naming conventions 的名称。我们使用命名约定是为了让我们更容易阅读别人的代码,也让其他人更容易阅读我们的代码。
下面代码中还有其他需要注意的地方。
ActionListener
实现使用 lambda expression
- 所有 Swing 代码必须在 Event Dispatch Thread (EDT) 上执行。当您创建并显示
JFrame
时,它也会启动 EDT,但是您也可以编写明确启动 EDT 的代码,这就是我在下面代码中的 main()
方法中所做的.
- 您可以调用其中一种
setLocation...()
方法将您的 JFrame
放置在屏幕的特定部分。如果您不这样做,那么它会被放置在屏幕的左上角。下面的代码调用 setLocationByPlatform()
让主机操作系统决定 JFrame
在屏幕上的位置。
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class JavaSwingPractice implements Runnable {
@Override // java.lang.Runnable
public void run() {
createAndShowGui();
}
private void createAndShowGui() {
JFrame frame = new JFrame("Dialog Box!");
JTextField textF = new JTextField(14);
JButton button = new JButton("Click!");
button.addActionListener(e -> textF.setText("Success!"));
JPanel panel = new JPanel();
panel.add(button);
frame.add(textF, BorderLayout.PAGE_START);
frame.add(panel, BorderLayout.PAGE_END);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new JavaSwingPractice());
}
}
是的,在上面的代码中我没有调用 setDefaultCloseOperation()
因为,至少在 JDK 8 中,默认值似乎是 EXIT_ON_CLOSE
.
1 – 有关布局管理器的解释和详细信息,请参阅 Swing 教程。
Javs Swing Error 您可以在上图中看到代码和输出。我已将 Eclipse IDE 用于 Java swing。但是按钮没有按预期出现。我是 Java Swing 和 Eclipse 的新手,所以我不知道是否需要任何其他设置。请帮助我并提前致谢。
问题可能出在面板的布局管理器上,(如果您没有使用面板,则应该使用面板直接添加对象而不是框架),如果您使用布局管理器,它遵循一些规则在面板中定位对象。喜欢将布局管理器保持为 null,虽然 idk y 人们不喜欢你说布局管理器为 null 但如果你想使用绝对位置,setLayout(null);可以工作
您在问题中写道
I'm new ... to Java Swing
那我推荐你看教程Creating a GUI With JFC/Swing
不要调用方法 setBounds()
来放置您的组件 – 除非您没有使用布局管理器1,但根据您的代码,您正在使用布局管理器,因为您的代码 not 调用 frame.setLayout(null)
.
[内容窗格] JFrame
的默认布局管理器是 BorderLayout. Since your code does not use the add(Component, Object) 方法,用于将 JButton
和 JTextField
添加到 JFrame
,两个组件都添加到 CENTER 面板,因此绘制在另一个组件之上。 CENTER 面板也使其组件尽可能大。因此 JButton
占据了所有 JFrame
.
这是您的代码的重写,但我真的建议您花时间并努力完成整个教程 – 如果您认真学习 Swing .另请注意,在下面的代码中,我更改了那些不符合 Java naming conventions 的名称。我们使用命名约定是为了让我们更容易阅读别人的代码,也让其他人更容易阅读我们的代码。
下面代码中还有其他需要注意的地方。
ActionListener
实现使用 lambda expression- 所有 Swing 代码必须在 Event Dispatch Thread (EDT) 上执行。当您创建并显示
JFrame
时,它也会启动 EDT,但是您也可以编写明确启动 EDT 的代码,这就是我在下面代码中的main()
方法中所做的. - 您可以调用其中一种
setLocation...()
方法将您的JFrame
放置在屏幕的特定部分。如果您不这样做,那么它会被放置在屏幕的左上角。下面的代码调用setLocationByPlatform()
让主机操作系统决定JFrame
在屏幕上的位置。
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class JavaSwingPractice implements Runnable {
@Override // java.lang.Runnable
public void run() {
createAndShowGui();
}
private void createAndShowGui() {
JFrame frame = new JFrame("Dialog Box!");
JTextField textF = new JTextField(14);
JButton button = new JButton("Click!");
button.addActionListener(e -> textF.setText("Success!"));
JPanel panel = new JPanel();
panel.add(button);
frame.add(textF, BorderLayout.PAGE_START);
frame.add(panel, BorderLayout.PAGE_END);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new JavaSwingPractice());
}
}
是的,在上面的代码中我没有调用 setDefaultCloseOperation()
因为,至少在 JDK 8 中,默认值似乎是 EXIT_ON_CLOSE
.
1 – 有关布局管理器的解释和详细信息,请参阅 Swing 教程。