为什么不显示我的标签?

时间:2013-05-28 11:16:15

标签: java swing event-handling

我是新手,有人可以帮我解决这个问题......

它没有显示我的“标签”,而只显示了“面板”类中的组件。

还有一个问题,任何人都可以澄清一下LayoutManagers吗? 可以在一个框架中使用2个或更多LayoutManagers吗?喜欢框架我将使用FlowLayout,我有一个JPanel添加到框架,我将使用BoxLayout ...它可能在第一个位置??

import javax.swing.*;
import java.awt.event.*;
import java.awt.Graphics;

public class JForm1 extends JFrame
{
    public JForm1()
    {
        init();
    }
    public static void main(String[] args) 
    {
        JForm1 form = new JForm1();
    }
    public void init()
    {
        JFrame frame = new JFrame("My Form 1");
        frame.setSize(500,500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().setLayout(new BoxLayout(this,BoxLayout.PAGE_AXIS));
        JLabel label = new JLabel("Enter your Name : ");
        panel MyPanel = new panel();
        frame.getContentPane().add(label);
        frame.getContentPane().add(MyPanel);
        frame.setVisible(true);
    }
}
class panel extends JPanel implements ActionListener
{
    JButton submitButton;
    JTextField text;
    panel()
    {
        this.setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
    }
    public void paintComponent(Graphics g)
    {
        text = new JTextField("Enter Name here");
        text.setSize(100,25);
        submitButton = new JButton("Submit");
        submitButton.setSize(50,90);
        submitButton.setBounds(200, 0, 80, 80);
        submitButton.addActionListener(this);
        this.add(text);
        this.add(submitButton);
    }
    public void actionPerformed(ActionEvent event)
    {
        if(event.getSource()==submitButton)
        {
            System.out.println("The Entered Name is : "+text.getText());
        }
    }
}

2 个答案:

答案 0 :(得分:3)

这是什么?:

public void paintComponent(Graphics g)
{
    text = new JTextField("Enter Name here");
    text.setSize(100,25);
    submitButton = new JButton("Submit");
    submitButton.setSize(50,90);
    submitButton.setBounds(200, 0, 80, 80);
    submitButton.addActionListener(this);
    this.add(text);
    this.add(submitButton);
}

此代码与paintComponent无关。 paintComponent是关于"绘制一个组件",即绘制一个矩形,画一条线,填充椭圆等等......这绝对不是添加组件的地方。相反,在构造函数中调用该代码。

此外,如果你正在使用LayoutManager(你应该这样做),调用setSize/setBounds/setLocation是没用的(无需删除那些调用)。

还有一些事情:

  • 如果您覆盖paintComponent,请务必调用super - 方法
  • 如果不需要,请不要延长JFrame(此处显然不需要)
  • 遵循Java命名约定(类名应以UpperCase字母,变量和带有lowerCase字母的方法开头)
  • 必须在EDT上调用所有与Swing相关的代码。在SwingUtilities.invokeLater()块内启动您的用户界面。

答案 1 :(得分:1)

尝试将布局更改为mypanel的FlowLayout。

mypanel.setLayout(new FlowLayout());