Java 如何将文本字段和图形放在同一个jframe中?
我试图在同一个jframe中有一个文本字段和图形,但它不能正常工作。我想让textfield位于底部,而jframe的其余部分用于图形,当我运行它时,textfield的行为异常,并覆盖了整个区域。有人知道我怎样才能让它正常工作吗?我想怎样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
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);
...
}
<