首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Frame JButton,ContentPane

Frame JButton,ContentPane
EN

Stack Overflow用户
提问于 2014-02-08 20:24:14
回答 4查看 777关注 0票数 0

我的代码有一个问题,因为我想做的就是显示文本字段和底部的按钮,所以我使用了:setLayout(new FlowLayout());,但我得到了一个错误,所以我决定更改为getContenPane();,但只有一个将出现在我的框架中,这是我的代码。

代码语言:javascript
复制
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);
}

}

EN

回答 4

Stack Overflow用户

发布于 2014-02-08 20:28:59

在框架中只有一个组件,因为它的默认布局是BorderLayout,它的默认位置是CENTER,并且您只能将一个组件放在中心。

cont.add(c, BorderLayout.CENTER);添加文本字段,用cont.add(b, BorderLayout.SOUTH);添加按钮,这样就解决了直接的问题。

我们无法帮助您处理错误,除非您告诉我们它们是什么,最好是堆栈跟踪和生成它们的代码。

票数 1
EN

Stack Overflow用户

发布于 2014-02-08 20:27:44

您需要为框架设置布局,以便可以排列组件,而不是将组件放置在彼此的顶部。

在你的构造函数add中,例如:

代码语言:javascript
复制
setLayout(new FlowLayout());

最重要的是,请阅读:http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html

完全可编译,无错误:

代码语言:javascript
复制
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);
}

}

票数 0
EN

Stack Overflow用户

发布于 2014-02-08 20:44:00

正如@rcook回答的那样,您的默认布局是将所有组件设置为CENTERBorderLayout

以下是您可以执行此操作的方法:

创建JPanel,将组件添加到JPanel,然后将JPanel添加到cont,如下所示:

代码语言:javascript
复制
JPanel panel=new JPanel();
panel.add(c);
panel.add(b);
cont.add(panel);

您可以像这样使用FLOWLAYOUT

代码语言:javascript
复制
setLayout(new FlowLayout());

在将任何组件添加到cont之前设置此项。

您只需在BorderLayout中将组件定位为:

代码语言:javascript
复制
cont.add(c,BorderLayout.CENTER);
cont.add(b,BorderLayout.SOUTH);

有用链接

  1. BorderLayout
  2. FlowLayout
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21645917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档