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

时间:2013-02-03 11:54:01

标签: java swing netbeans jpanel

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

我到目前为止:

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);
            }
          }

我还不允许发布图片,但我会提供图片的链接here

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

3 个答案:

答案 0 :(得分:7)

这里我稍微修改了你的代码,但是以类似的方式做了。 除非我不想做一些有创意的事情,否则我不会延长JFrame直到{。}}。

您已经扩展了JFrame,因此无法使用frame.foo()调用方法 但只是foo(),而最重要的JFrame frame = new HelloWorld(),如果您已经使用JFrame扩展了课程,那么这将毫无意义:

enter image description here

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);
        }
      }

此外,您还可以使用panel扩展JPanel课程:

 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);
        }
      }

答案 1 :(得分:4)

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

JPanel panel = new JPanel();

使用:

SomePanel panel = new SomePanel();

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

一些帮助你的想法:

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

答案 2 :(得分:4)

这是因为您的班级名称是panel而不是JPanel

修改:

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

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

示例:

Class Panel extends JPanel {}

对象:

Panel panel = new Panel()

在这里你可以清楚地看到哪一个是类名,哪个是该类的对象(该类的实例)。