我的代码有一个问题,因为我想做的就是显示文本字段和底部的按钮,所以我使用了: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);
}}
发布于 2014-02-08 20:28:59
在框架中只有一个组件,因为它的默认布局是BorderLayout,它的默认位置是CENTER,并且您只能将一个组件放在中心。
用cont.add(c, BorderLayout.CENTER);添加文本字段,用cont.add(b, BorderLayout.SOUTH);添加按钮,这样就解决了直接的问题。
我们无法帮助您处理错误,除非您告诉我们它们是什么,最好是堆栈跟踪和生成它们的代码。
发布于 2014-02-08 20:27:44
您需要为框架设置布局,以便可以排列组件,而不是将组件放置在彼此的顶部。
在你的构造函数add中,例如:
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);
}}
发布于 2014-02-08 20:44:00
正如@rcook回答的那样,您的默认布局是将所有组件设置为CENTER的BorderLayout。
以下是您可以执行此操作的方法:
创建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);有用链接
https://stackoverflow.com/questions/21645917
复制相似问题