在这个JPanel中,我的JButton" BackToTheMenu"在面板的顶部,我知道它在哪里,所以我可以点击它,但我看不到它。当我点击它时,它会完美地带我到下一个面板。我如何让它出现!?非常感谢帮助!
public class GridPanel extends JPanel implements ActionListener
{
Ball ball = new Ball();
Timer timer = new Timer(14, this);
JButton backToTheMenu = new JButton("To the Menu");
public GridPanel()
{
setBackground(Color.WHITE);
setPreferredSize(new Dimension(900, 710));
add(ball);
backToTheMenu.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent arg0)
{
ProjectileGame.gridButtonPressed();
}
});
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.RED);
g.fillRect(0, 649, 30, 33);
g.setColor(Color.BLUE);
for (int i = 0; i < 35; i++)
{
g.setColor(Color.GREEN);
g.drawLine(0, (20+(30*i)), 900, (20+(30*i)));
g.drawLine((30+(30*i)), 0, (30+(30*i)), 1000);
}
ball.paintComponent(g);
g.setColor(Color.RED);
g.drawLine(0, 650, 900, 650);
g.drawLine(30, 0, 30, 1000);
Graphics2D g2d1 = (Graphics2D)g;
g.setColor(Color.BLACK);
g2d1.drawString("X Displacement (metres)", 400, 667);
AffineTransform at = new AffineTransform();
at.setToRotation(Math.PI / -1.97);
g2d1.setTransform(at);
g2d1.drawString("Y Displacement (metres)", -380, 8);
setOpaque(false);
for (Component child : getComponents())
{
child.repaint();
}
}
public void actionPerformed(ActionEvent e)
{
ball.ballPhysics();
repaint();
timer.restart();
}
}
答案 0 :(得分:2)
你的很多代码都不正确。
绘画方法仅适用于绘画。你不应该:
调用ball.paintComponent()。面板将自动绘制添加到其中的任何组件。
获取子组件并对其调用repaint()。同样,该面板将绘制所有子组件。
调用setOpaque(...)
。应该在类的构造函数中设置opaque属性。
不应在此课程中定义“返回菜单”按钮。它应该在父类中定义。
所以代码应该类似于:
JButton back = new JButton("Back to the Menu");
back.addActionListener(...);
frame.add(back, BorderLayout.PAGE_START);
JPanel grid = new GridPanel();
frame.add(grid, BorderLayout.CENTER);
答案 1 :(得分:0)
我不确定你是否在代码的其他地方有这个,但我没有看到你添加回到TheMenu。如果这是您的代码:
celcius(temp)
你需要这个:
public GridPanel()
{
setBackground(Color.WHITE);
setPreferredSize(new Dimension(900, 710));
add(ball);
backToTheMenu.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent arg0)
{
ProjectileGame.gridButtonPressed();
}
});
}
但如果你把它添加到其他地方,请忽略它。