按钮和文本字段不会显示在Java中

对于学校,我必须在一个按钮和两个文本区域内制作一个JFrame。 无论你在Textfield中放置什么,按下按钮时都必须进入textfield 2。 当我运行程序时,我得到了代码,我应该看到文本字段和按钮。 无论出于何种原因,它都没有。

我到目前为止:

package helloworld; import javax.swing.*; import java.awt.event.*; public class HelloWorld extends JFrame { public static void main(String[] args) { JFrame frame = new HelloWorld(); frame.setSize(400, 400); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setTitle("Hello World Button App"); JPanel panel = new JPanel(); frame.setContentPane(panel); fram.setVisible(true); } } class panel extends JPanel { public JButton btn1 = new JButton("Klick!"); public JTextField txt1 = new JTextField(10); public JTextField txt2 = new JTextField(10); public panel() { add(btn1); add(txt1); add(txt2); } } 

我还不能发布图片,但我会在这里提供图片的链接

如果这个问题已经出现,我很抱歉,但我找不到类似的问题。 我是编程的新手,所以当我忘记某些内容或写错了内容时,请不要对我大喊大叫!

在这里,我已经修改了一些代码,但是以类似的方式进行了修改。 除非我不想做一些有创意的事情,否则我不会扩展JFrame ,但你总是可以。

你已经扩展了JFrame ,所以没有值得用frame.foo()调用方法但只是foo()和最重要的JFrame frame = new HelloWorld() ,如果你已经使用JFrame扩展了类,那就没有意义了:

在此处输入图像描述

 import javax.swing.*; public class HelloWorld extends JFrame{ public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { new HelloWorld().setVisible(true); } }); } public HelloWorld() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setTitle("Hello World Button App"); panel pan= new panel(); add(pan.panel); pack(); setVisible(true); } } class panel { private JButton btn1 = new JButton("Klick!"); private JTextField txt1 = new JTextField(10); private JTextField txt2 = new JTextField(10); JPanel panel; public panel() { panel = new JPanel(); panel.add(btn1); panel.add(txt1); panel.add(txt2); } } 

此外,您还可以使用JPanel扩展您的panel类:

  public HelloWorld() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setTitle("Hello World Button App"); panel pan= new panel(); add(pan); pack(); setVisible(true); } } class panel extends JPanel { private JButton btn1 = new JButton("Klick!"); private JTextField txt1 = new JTextField(10); private JTextField txt2 = new JTextField(10); public panel() { add(btn1); add(txt1); add(txt2); } } 

那是因为你的类名是panel而不是JPanel

修改这个:

 panel panel = new panel(); frame.setContentPane(panel); frame.setVisible(true); 

您应该尝试使用不太混乱的类的名称,并尝试使用大写声明它们。

例:

 Class Panel extends JPanel {} 

宾语:

 Panel panel = new Panel() 

在这里,您可以清楚地读取哪个是类名,哪个是该类的对象(该类的实例)。

您声明了一个名为panel的类,您没有在任何地方使用它。 请更换线路bwlow:

 JPanel panel = new JPanel(); 

有:

 SomePanel panel = new SomePanel(); 

然后,您的类panel变为SomePanel以遵循正确的类命名。

一些想法可以帮助你:

  • 按照Java样式命名您的类
  • 不要使用公共字段
  • 在面板上设置布局。 这次它适用于您,因为默认值为FlowLayout