7

对于学校,我必须在一个按钮和两个文本字段中制作一个 JFrame。无论您在 Textfield 1 中放置什么,都必须在按下按钮时进入 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);
            }
          }

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

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

4

3 回答 3

7

在这里,我对您的代码进行了一些修改,但以类似的方式进行了修改。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);
        }
      }

此外,您还可以使用以下方法扩展您的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);
        }
      }
于 2013-02-03T14:16:34.167 回答
4

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

修改这个:

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

您应该尝试为您的类使用不那么令人困惑的名称,并尝试使用大写来声明它们。

例子:

Class Panel extends JPanel {}

目的:

Panel panel = new Panel()

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

于 2013-02-03T12:01:15.097 回答
4

你声明了一个panel你没有在任何地方使用的类。请替换 bwlow 行:

JPanel panel = new JPanel();

和:

SomePanel panel = new SomePanel();

然后,您的班级panelSomePanel遵循正确的班级命名。

一些可以帮助你的想法:

  • 按照 Java 风格命名你的类
  • 不要使用公共字段
  • 在面板上设置布局。这次它对你有用,因为默认是FlowLayout.
于 2013-02-03T12:00:38.787 回答