框架JButton,ContentPane

时间:2014-02-08 12:24:14

标签: java swing user-interface

我的代码有问题,因为我想做的就是出现文本字段,然后在底部按钮,所以我使用了: 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);
}

}

4 个答案:

答案 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);

有用的链接

  1. BorderLayout
  2. FlowLayout

答案 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();

}

}

这就是结果

enter image description here