如何将JButton添加到JFrame?

时间:2015-10-05 04:54:11

标签: java swing jframe jpanel jbutton

此程序显示一个框架,其中心有一个圆圈。我试图在框架中添加一个JButton,这样我可以稍后实现一个动作监听器,以便在按下时显示圆圈,但是现在我实际上没有显示按钮了。谁能告诉我这是怎么发生以及为什么会这样?

import javax.swing.JComponent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

import java.awt.*;
import java.awt.geom.*;

public class SimonShape extends JFrame {

private JFrame f;
private JPanel p;
private JButton b1;
private JLabel lab;

public static void main(String[] args) {
    new SimonShape();
}

public SimonShape() {


    f = new JFrame("Simon Says");
    f.setVisible(true);
    f.setSize(500, 500);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    p = new JPanel();
    p.setBackground(Color.GRAY);

    b1 = new JButton("Click Here to Begin!");

    p.add(b1);
    f.add(p);
    f.setLocationRelativeTo(null);


    f.add(new DrawStuff(), BorderLayout.CENTER);

}

public class DrawStuff extends JComponent {

    public void paint(Graphics g) {

        Graphics2D g2 = (Graphics2D) g;
        Graphics2D g3 = (Graphics2D) g;
        Graphics2D g4 = (Graphics2D) g;
        Graphics2D g5 = (Graphics2D) g;

        // assume d == 145 && e == 90

        g2.setPaint(Color.GREEN);
        g2.fill(new Arc2D.Double(150, 150, 200, 200, 145, 90, Arc2D.PIE));

        g3.setPaint(Color.BLUE);
        g3.fill(new Arc2D.Double(150, 150, 200, 200, 235, 90, Arc2D.PIE));

        g4.setPaint(Color.RED);
        g4.fill(new Arc2D.Double(150, 150, 200, 200, 325, 90, Arc2D.PIE));

        g5.setPaint(Color.YELLOW);
        g5.fill(new Arc2D.Double(150, 150, 200, 200, 55, 90, Arc2D.PIE));

    }

}

}

2 个答案:

答案 0 :(得分:1)

问题是您在将JButton添加到屏幕之前已将JFrame放在屏幕上。

您可以将此行f.setVisible(true);移动到构造函数的底部(最后一行)。

或者,您可以在将所有必需组件添加到JFrame之后添加此行f.revalidate();

答案 1 :(得分:0)

更改f.add(p);并添加边框布局的位置。并且在添加所有组件之后还将setVisible调用移到最后。