此程序显示一个框架,其中心有一个圆圈。我试图在框架中添加一个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));
}
}
}
答案 0 :(得分:1)
问题是您在将JButton添加到屏幕之前已将JFrame放在屏幕上。
您可以将此行f.setVisible(true);
移动到构造函数的底部(最后一行)。
或者,您可以在将所有必需组件添加到JFrame之后添加此行f.revalidate();
。
答案 1 :(得分:0)
更改f.add(p);
并添加边框布局的位置。并且在添加所有组件之后还将setVisible
调用移到最后。