Java 基本GUI Swing-未显示组件

Java 基本GUI Swing-未显示组件,java,swing,jframe,Java,Swing,Jframe,这是我的代码片段,其中包含childJButton和JPanel对象,但它不起作用。而且它在Eclipse中没有显示任何编译错误 import java.awt.FlowLayout; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; i

这是我的代码片段,其中包含child
JButton
JPanel
对象,但它不起作用。而且它在Eclipse中没有显示任何编译错误

import java.awt.FlowLayout;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

class gui extends JFrame implements ActionListener {
    private JButton b;
    private TextField c;
    private JLabel l;
    private String sn;

    // Constructor for making framework
    public gui() {  setLayout(new FlowLayout());
    JFrame f=new JFrame("Hello!");
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setVisible(true);
    f.setSize(200,200);
    f.setTitle("GUI");

    b=new JButton("Click");
    l=new JLabel("Enter Name");
    c=new TextField("Enter..",10);
    c.setEditable(true);
    l.setBounds(20,20,20,20);
    f.setBounds(10, 10, 10, 10);
    b.addActionListener(this);
    add(b);
    add(f);
    add(l);
    add(c);
    } 

    public static void main(String[] args) {
        gui g=new gui();
        g.setVisible(true);
    } //main method

    @Override
    public void actionPerformed(ActionEvent e)
    {
        System.out.println("Working");
    }
}

你的
JFrame f=newjframe(“你好!”)是不需要的
您需要使用
this
,它已经是您的
JFrame
了,比如:

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
this.setSize(200,200);
this.setTitle("GUI");

同时删除:
add(f)
f.setBounds(10,10,10,10)

你的
JFrame f=newjframe(“你好!”)是不需要的
您需要使用
this
,它已经是您的
JFrame
了,比如:

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
this.setSize(200,200);
this.setTitle("GUI");
同时删除:
add(f)
f.setBounds(10,10,10,10)

您的类“是一个”GUI,然后您还创建了一个新的JFrame,因此您的代码中实际上有两个框架

但是,使其可见的框架没有添加任何组件,因此只能看到框架

然后尝试将组件添加到类中,该类是一个框架。但是,您会遇到两个问题:

  • 您永远不会使此帧可见并显示

  • Swing使用布局管理器(您不需要使用setBounds(…)。默认情况下,它使用边界布局。在不指定约束的情况下将构件添加到框架时,构件将添加到“中心”。但是,只有一个组件可以显示在“中心”,因此只有最后添加的组件才会可见

  • 您还存在其他问题,因为您没有在事件调度线程上创建GUI。所以要纠正的问题实在太多了

    我建议您阅读上Swing教程中的部分,了解如何创建简单GUI的工作示例。然后修改代码。

    您的类“是一个”GUI,然后您还创建了一个新的JFrame,因此您的代码中实际上有两个框架

    但是,使其可见的框架没有添加任何组件,因此只能看到框架

    然后尝试将组件添加到类中,该类是一个框架。但是,您会遇到两个问题:

  • 您永远不会使此帧可见并显示

  • Swing使用布局管理器(您不需要使用setBounds(…)。默认情况下,它使用边界布局。在不指定约束的情况下将构件添加到框架时,构件将添加到“中心”。但是,只有一个组件可以显示在“中心”,因此只有最后添加的组件才会可见

  • 您还存在其他问题,因为您没有在事件调度线程上创建GUI。所以要纠正的问题实在太多了


    我建议您阅读上Swing教程中的部分,了解如何创建简单GUI的工作示例。然后修改该代码。

    因为您已经扩展了
    JFrame
    ,所以不必创建新的
    JFrame

    因为现在你的类本身就是一个JFrame。这意味着您可以使用
    this
    替换
    f
    -JFrame的所有用法:

    这样,也可以正确添加其他组件。因为现在你把b,f,i和c加到右边的JFrame中

    所以用这个:

    this.setVisible(true);
    this.setSize(200,200);
    this.setTitle("GUI");
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    或者更简单:

    setVisible(true);
    setSize(200,200);
    setTitle("GUI");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    

    因为您已经扩展了
    JFrame
    ,所以不必创建新的
    JFrame

    因为现在你的类本身就是一个JFrame。这意味着您可以使用
    this
    替换
    f
    -JFrame的所有用法:

    这样,也可以正确添加其他组件。因为现在你把b,f,i和c加到右边的JFrame中

    所以用这个:

    this.setVisible(true);
    this.setSize(200,200);
    this.setTitle("GUI");
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    或者更简单:

    setVisible(true);
    setSize(200,200);
    setTitle("GUI");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    

    “不工作”是什么意思?它是如何工作的?Java GUI必须在不同的操作系统、屏幕大小、屏幕分辨率等上工作。因此,它们不利于像素完美布局。而是使用布局管理器,或者与布局填充和边框一起使用。你说的“不工作”是什么意思?它是如何工作的?Java GUI必须在不同的操作系统、屏幕大小、屏幕分辨率等上工作。因此,它们不利于像素完美布局。请改用布局管理器,或与布局填充和边框一起使用。谢谢@camcikr为什么我的Jlabel和Jtextfield不工作,只有jbutton在工作?@M.UsmanSiddiqui,我已经解释过了。请阅读我对BorderLayout的评论!!!阅读本教程,了解更好的代码结构方法。从一个工作示例开始!谢谢#camcikr@camcikr为什么我的Jlabel和Jtextfield不工作,只有jbutton在工作?@M.UsmanSiddiqui,我已经解释过了。请阅读我对BorderLayout的评论!!!阅读本教程,了解更好的代码结构方法。从一个工作示例开始!但是为什么我的Jlabel和Jtextfield不工作只有jbutton在工作呢?别担心,伙计!我会做的,只要我的东西都能用!请尽快提供帮助。但是为什么我的Jlabel和Jtextfield不工作只有jbutton在工作?别担心,伙计!我会做的,只要我的东西都能用!请尽快帮忙。