JButton无法正确显示:Eclipse

问题描述

Javs Swing Error 您可以在上图中看到代码输出。我已经将Eclipse IDE用于Java swing。但是按钮没有按预期来。我对Java Swing和Eclipse都是新手,所以我不知道是否需要任何其他设置。请帮我,谢谢。

解决方法

您在问题中写道

我是新来的... Java Swing

然后,我建议您阅读教程Creating a GUI With JFC/Swing

请勿调用方法setBounds()来放置组件–除非您未使用布局管理器 1 ,但是根据您的代码,您正在使用布局管理器,因为您的代码确实致电frame.setLayout(null)

{{1}的[内容窗格]的默认布局管理器是BorderLayout。由于您的代码未使用add(Component,Object)方法将JFrameJButton添加到JTextField,因此这两个组件都添加到了CENTER面板中,因此在顶部绘制了一个其他的。此外,CENTER面板使其组件尽可能大。因此JFrame占据了所有JButton

这里是对代码的重写,但是如果您是认真学习 Swing 的人,我真的建议您花些时间并努力阅读整个教程。还要注意,在下面的代码中,我更改了不遵守Java naming conventions的那些名称。我们使用命名约定,以使我们更容易阅读他人的代码,并使其他人阅读我们的代码。

以下代码中需要注意的其他事项。

  • JFrame实现使用lambda expression
  • 所有 Swing 代码必须在事件调度线程(EDT)上执行。创建并显示ActionListener时,它也会启动EDT,但是您也可以编写代码来显式启动EDT,这就是我在下面代码的JFrame方法中所做的事情。
  • 您可以调用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()); } } ,因为至少在JDK 8中,默认值似乎是setDefaultCloseOperation()

1 –有关布局管理器的说明和详细信息,请参见Swing教程。

,

问题可能是面板的布局管理器(如果不使用面板,则应使用面板直接添加对象而不是框架),如果使用布局管理器,则会出现以下情况在面板中放置对象的一些规则。我想让布局管理器保持为null,尽管有些人不喜欢说布局管理器为null,但是如果您要使用绝对位置,则setLayout(null);可以工作