Java 添加了JButton,但不可见
我想用Java创建一个乒乓球游戏。我用paintComponent方法画所有的东西。在这个方法中,我调用另一个方法“initBall”。此方法在起始位置绘制球。当我死的时候,我想再次在初始位置画我的球,我想在我的面板中央添加一个按钮,上面写着“按escape继续”,然后球开始移动。问题是我的按钮不可见 请帮帮我:) 这是我的密码:Java 添加了JButton,但不可见,java,swing,panel,jbutton,paintcomponent,Java,Swing,Panel,Jbutton,Paintcomponent,我想用Java创建一个乒乓球游戏。我用paintComponent方法画所有的东西。在这个方法中,我调用另一个方法“initBall”。此方法在起始位置绘制球。当我死的时候,我想再次在初始位置画我的球,我想在我的面板中央添加一个按钮,上面写着“按escape继续”,然后球开始移动。问题是我的按钮不可见 请帮帮我:) 这是我的密码: public class PlayPanel extends JPanel implements ConstantesCommunes { /**
public class PlayPanel extends JPanel implements ConstantesCommunes {
/**
*
*/
private static final long serialVersionUID = 1L;
private int posX;
private int posY;
private boolean newBall = true;
private JPanel pan_WestZone = new JPanel();
private JPanel pan_EastZone = new JPanel();
private JButton but_Escape = new JButton("Press escape to continue !");
Graphics2D graphics2d;
/*
* Constructeur de classe : PlayPanel.java
*/
// ==============================================
public PlayPanel() {
super(new BorderLayout());
setBackground(Color.DARK_GRAY);
pan_WestZone.setPreferredSize(WESTPANEL_SIZE);
pan_EastZone.setPreferredSize(EASTPANEL_SIZE);
pan_WestZone.setBackground(ZONE_COLOR);
pan_EastZone.setBackground(ZONE_COLOR);
add(pan_WestZone, BorderLayout.WEST);
add(pan_EastZone, BorderLayout.EAST);
}
/*
* Ajouter la balle sur la surface de jeux
*/
// ==============================================
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
posX = SCREEN_WIDTH / 2;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setColor(Color.ORANGE);
initBall(g2);
// trait épais
g2.setColor(Color.LIGHT_GRAY);
g2.setStroke(new BasicStroke(10));
g2.drawLine((SCREEN_WIDTH / 2) - 5, SCREEN_HEIGHT,
(SCREEN_WIDTH / 2) - 5, 0);
}
/*
* Initialiser la balle lorsqu'un joueur perd
*/
// ==============================================
private void initBall(Graphics2D graphics2d) {
but_Escape.setPreferredSize(new Dimension(100, 30));
Graphics2D g2 = graphics2d;
g2.fillOval(SCREEN_WIDTH / 2, 0, BALL_WIDTH, BALL_HEIGHT);
// The problem is here
add(but_Escape);
}
谢谢尝试添加
setVisible(true)在inItBall(…)
中添加按钮后,只需revalidate()
您的JPanel
,如下所示
private void initBall(Graphics2D graphics2d)
{
but_Escape.setPreferredSize(new Dimension(100, 30));
Graphics2D g2 = graphics2d;
g2.fillOval(SCREEN_WIDTH / 2, 0, BALL_WIDTH, BALL_HEIGHT);
// The problem is here
add(but_Escape);
revalidate();
}
@MTHEADS:或者你可以在revalidate()
之后调用repaint()
,使JButton
出现在JPanel
上,如果revalidate()
单独不起作用。呵呵,非常欢迎你,保持微笑:-)是正确的-除了OP从内部调用init组件之外(请参阅我对问题@mtheads的评论)在绘制时永远不要更改组件的状态!相反,请更改状态(由任何事件触发),然后在以下情况下触发重新/绘制/验证needed@kleopatra:啊哈,是的,我忘了抓住那个东西:(,这又是一个很好的洞察力:-)