如何将文本字段和图形放在同一个jframe中?

时间:2014-05-22 15:28:52

标签: java swing graphics textfield

我试图在同一个jframe中有一个文本字段和图形,但它无法正常工作。我希望将文本字段放在底部,而将jframe的其余部分放在图形中,而当我运行它时,文本字段很奇怪,并覆盖整个区域。有谁知道我怎么能让它按照我想要的方式工作?

package pack;


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

public class gui extends JPanel implements Runnable{ 

    Thread t = new Thread(this);
    protected JTextField textField;
    private final static String newline = "\n";

    public int x;
    public int y;

    public static void main(String args[])
    {
        new gui();
        new input();
    }

    public void input()
    {
        textField = new JTextField(20);

        GridBagConstraints c = new GridBagConstraints();
        c.gridwidth = GridBagConstraints.REMAINDER;
        c.gridwidth = 500;
        c.gridheight = 100;
        c.fill = GridBagConstraints.HORIZONTAL;
        add(textField, c);

        c.fill = GridBagConstraints.BOTH;
        c.weightx = 1.0;
        c.weighty = 1.0;
    }
    public void actionPerformed(ActionEvent evt) {
        String text = textField.getText();
        textField.selectAll();
    }

    public gui()
    {
        textField = new JTextField(20);

        JFrame f = new JFrame("lol");
        System.out.println("::");

        f.setTitle("Basic window");
        f.setSize(500, 500);
        f.setLocationRelativeTo(null);

        f.add(this);
        f.setVisible(true);
        f.setFocusable(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(textField);

        run();
    }

    public void run()
    {
        while(true)
        {
            try
            {
                t.sleep(10);
            }
            catch(Exception e){}

            System.out.println(":D");
            x++;
            y++;

            repaint();
        }
    }

    public void paint (Graphics g)
    {
        g.setColor(Color.red);
    }
}

2 个答案:

答案 0 :(得分:2)

删除此课程并重新开始使用新课程。代码结构错误,类名错误,自定义绘图错误,使用Threads错误,new input()没有做任何事情,你不应该使用Thread.sleep( ),你不应该覆盖paint(),你不应该在框架可见后添加一个组件到框架。

首先阅读Custom Painting上的Swing教程中的部分。在那里,您将找到一个工作示例,它将向您展示如何在进行自定义绘制时更好地构建您的类。使用此演示代码作为程序的起点,并对此工作代码进行更改(一次一个)。

然后您可以更改该代码并将JTextField添加到框架中。您还需要阅读Using Layout Managers上的Swing教程,以了解BorderLayout的工作原理。所以从简单的工作开始,然后添加额外的组件。不要一次尝试这一切。

答案 1 :(得分:1)

你正在以错误的方式做事。

    默认情况下,
  • JFrame使用BorderLayout并且您在中心添加了两个组件,因此只有最后一个组件可见。

  • 您正在JTextField以及JFrame中添加JPanel。不知道为什么?


使用BorderLayout.SOUTH在南方添加JTextField,不要将其添加到JPanel,如下所示:

public gui() {
    ...
    textField = new JTextField(20);
    JFrame f = new JFrame("lol");        
    f.add(this);        
    f.add(textField, BorderLayout.SOUTH);
    ...
}

请再次阅读以下帖子。

How to Use GridLayout

How to Use GridBagLayout