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

Java 如何将文本字段和图形放在同一个jframe中?,java,swing,graphics,textfield,Java,Swing,Graphics,Textfield,我试图在同一个jframe中有一个文本字段和图形,但它不能正常工作。我想让textfield位于底部,而jframe的其余部分用于图形,当我运行它时,textfield的行为异常,并覆盖了整个区域。有人知道我怎样才能让它正常工作吗?我想怎样 package pack; import javax.swing.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class gui extends

我试图在同一个jframe中有一个文本字段和图形,但它不能正常工作。我想让textfield位于底部,而jframe的其余部分用于图形,当我运行它时,textfield的行为异常,并覆盖了整个区域。有人知道我怎样才能让它正常工作吗?我想怎样

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);
    }
}

删除此类并使用新类重新开始。代码结构错误,类名错误,自定义绘制错误,线程使用错误,
new input()
不起任何作用,您不应该使用Thread.sleep(),不应该重写paint(),不应该在框架可见后向框架添加组件

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


然后您可以更改该代码并向帧中添加JTextField。您还需要阅读关于使用布局管理器的Swing教程,以了解
边界布局的工作原理。因此,从简单的工作开始,然后添加额外的组件。不要试图一次完成所有任务。

删除此类,重新开始新类。代码结构错误,类名错误,自定义绘制错误,线程使用错误,
new input()
不起任何作用,您不应该使用Thread.sleep(),不应该重写paint(),不应该在框架可见后向框架添加组件

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


然后您可以更改该代码并向帧中添加JTextField。您还需要阅读关于使用布局管理器的Swing教程,以了解
边界布局的工作原理。因此,从简单的工作开始,然后添加额外的组件。不要试图一次完成所有任务。

删除此类,重新开始新类。代码结构错误,类名错误,自定义绘制错误,线程使用错误,
new input()
不起任何作用,您不应该使用Thread.sleep(),不应该重写paint(),不应该在框架可见后向框架添加组件

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


然后您可以更改该代码并向帧中添加JTextField。您还需要阅读关于使用布局管理器的Swing教程,以了解
边界布局的工作原理。因此,从简单的工作开始,然后添加额外的组件。不要试图一次完成所有任务。

删除此类,重新开始新类。代码结构错误,类名错误,自定义绘制错误,线程使用错误,
new input()
不起任何作用,您不应该使用Thread.sleep(),不应该重写paint(),不应该在框架可见后向框架添加组件

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


然后您可以更改该代码并向帧中添加JTextField。您还需要阅读关于使用布局管理器的Swing教程,以了解
边界布局的工作原理。因此,从简单的工作开始,然后添加额外的组件。不要试图一次完成所有的事情。

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

  • 默认情况下,
    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);
    ...
}

请再次阅读下面的帖子


你用错误的方式做的事情

  • 默认情况下,
    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);
    ...
}

请再次阅读下面的帖子


你用错误的方式做的事情

  • 默认情况下,
    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);
    ...
}
<