我的代码有问题,因为我想做的就是出现文本字段,然后在底部按钮,所以我使用了:
setLayout(new FlowLayout());
但是我收到了错误,所以我决定更改为getContenPane();
,但我的框架中只会显示一个是我的代码。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Awe extends JFrame implements ActionListener {
JTextField c;
JButton b;
Container cont = getContentPane();
public Awe() {
c = new JTextField(15);
b = new JButton("Ok");
c.addActionListener(this);
cont.add(c);
b.addActionListener(this);
cont.add(b);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source == c) {
}
}
public static void main(String[] args) {
Awe frm = new Awe();
frm.setTitle("Enter Your Character");
frm.setSize(300, 150);
frm.setVisible(true);
}
}
答案 0 :(得分:1)
你的框架中只有一个组件,因为它的默认布局是BorderLayout,它的默认位置是CENTER,你只能将一个组件放在中心。
使用cont.add(c, BorderLayout.CENTER);
添加文本字段,并添加带cont.add(b, BorderLayout.SOUTH);
的按钮,这样可以解决当前问题。
我们无法帮助您解决错误,除非您告诉我们它们是什么,最好是使用堆栈跟踪和产生它们的代码。
答案 1 :(得分:0)
您需要为框架设置布局,以便可以对组件进行排列,而不是将它们放在彼此的顶部。
在构造函数中添加,例如:
setLayout(new FlowLayout());
最重要的是,请阅读:http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html
完全可编辑,没有错误:
public class Awe extends JFrame implements ActionListener {
JTextField c;
JButton b;
Container cont = getContentPane();
public Awe() {
setLayout(new FlowLayout());
c = new JTextField(15);
b = new JButton("Ok");
c.addActionListener(this);
cont.add(c);
b.addActionListener(this);
cont.add(b);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source == c) {
}
}
public static void main(String[] args) {
Awe frm = new Awe();
frm.setTitle("Enter Your Character");
frm.setSize(300, 150);
frm.setVisible(true);
}
}
答案 2 :(得分:0)
作为@rcook的回答,您的默认布局是BorderLayout
,它将所有组件设置为CENTER
。
以下是您可以采取的方法:
制作JPanel
,将您的组件添加到JPanel
,然后将JPanel
添加到cont
,作为:
JPanel panel=new JPanel();
panel.add(c);
panel.add(b);
cont.add(panel);
或您可以使用FLOWLAYOUT
作为:
setLayout(new FlowLayout());
在将任何组件添加到cont
之前设置此项。
或您可以将您的组件定位在BorderLayout
中:
cont.add(c,BorderLayout.CENTER);
cont.add(b,BorderLayout.SOUTH);
有用的链接
答案 3 :(得分:0)
我总是这样做的最好方法是使用setBounds()方法
import java.awt.Dimension;
import javax.swing.*;
public class Frame extends JFrame{
JButton okBtn = new JButton ("OK");
JTextField filed = new JTextField();
public Frame(){
super.setSize(new Dimension(200,200));
super.setVisible(true);
super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
super.setResizable(false);
super.setLayout(null);
super.getContentPane().add(okBtn);
super.getContentPane().add(filed);
filed.setBounds(10, 10, 150, 30);
okBtn.setBounds(10, 45, 70, 30);
super.validate();
}
public static void main(String[] args) {
new Frame();
}
}
这就是结果