基本GUI Swing - 未显示的组件

时间:2015-01-30 15:28:19

标签: java swing jframe

以下是我的代码段,其中包含子JButtonJPanel个对象,但它无效。并且它没有在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");
    }
}

3 个答案:

答案 0 :(得分:4)

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

然而,你看到的框架没有添加任何组件,所以你看到的只是框架。

然后,您尝试向组中添加组件,即框架。但是,您有两个问题:

  1. 你永远不会让这个框架可见

  2. Swing使用布局管理器(您不需要使用setBounds(...))。默认情况下,它使用BorderLayout。在未指定约束的情况下向框架添加组件时,组件将添加到“CENTER”。但是,“CENTER”中只能显示一个组件,因此只会添加最后一个组件。

  3. 您还有其他问题,因为您没有在Event Dispatch Thread上创建GUI。所以要解决的问题真的太多了。

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

答案 1 :(得分:2)

不需要JFrame f=new JFrame("Hello!");
您需要使用this已经JFrame的{​​{1}}:

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

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

答案 2 :(得分:0)

由于您已经展开JFrame,因此您无需创建新的JFrame

因为现在你的类本身就是一个JFrame。这意味着您可以使用f代替this - 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);