我已经查找了一些可能的问题答案,并且只有2个是相关的,其中我发现一个超级混乱,另一个看起来它告诉我覆盖绘制方法而不显示如何做到这一点。我不确切知道在这种情况下我是否需要这样做。所以基本上我刚开始制作这个程序,我只是想让主要的课程广泛运作。所以基本上它正在做我想要的一切,因为按钮确实有效,当我点击它们时它们会打印出来。但是,一个问题是,当我第一次运行程序时,除了播放器与计算机按钮之外,所有内容都会显示,直到我将鼠标悬停在它上面。以下是我查看过的两个主题之一的链接:JButton not visible until mouseover。 这是一个个人项目,而不是那些想要了解的人的学校项目。无论如何,我做了(正如你将看到的)重绘窗口并添加按钮,因为我知道这是一个非常常见的错误,使这种问题发生。我尝试将其设置为可见为真,但无济于事。这是我的主要类的代码:
import javax.swing.*;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class SpaceGame implements ActionListener{
private JFrame window;
private Sprite background;
private PlayervsPlayer playervsplayer;
private PlayervsComputer playervscomputer;
private JButton pvp;
private JButton pvc;
private int win_size=1000;//Window size has to be a minimum of 603 because we are keeping a button width of 200 constant
private int win_location=50;
private final int button_width=200;
private final int button_height=25;
public static void main( String[] args )
{
SpaceGame start = new SpaceGame();
start.makeWindow();
}
/**
* Create the window, containing a single button.
*/
private void makeWindow()//Remember add instructions later
{
window = new JFrame();
window.setLayout( null );
window.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
window.setTitle( "Space Shooter!" );
window.setLocation( win_location, win_location );
window.setSize( win_size, win_size );
window.setResizable( false );
background=new Sprite("space_background.jpg");
background.setSize(win_size,win_size);
background.setLocation(0,0);
window.getContentPane().setBackground(Color.white);
window.setVisible( true );
window.add(background);
playervsplayer=new PlayervsPlayer();
playervscomputer=new PlayervsComputer();
pvp = new JButton();
pvp.setLocation((int)((win_size-button_width*2)/3),(int)(win_size-(button_width/2)));//x=200,y=900-y stays same for both buttons
pvp.setSize( button_width, button_height);
pvp.setText( "Player vs Player" );
pvp.setBackground(Color.green);
pvp.addActionListener( this );
window.add( pvp );
pvc = new JButton();
pvc.setLocation(pvp.getX()+(button_width*2),(int)(win_size-(button_width/2)));
pvc.setSize( button_width, button_height);
pvc.setText("Player vs Computer");
pvc.setBackground(Color.green);
pvc.addActionListener(this);
window.add(pvc);
window.repaint();
}
public void actionPerformed(ActionEvent e) {
if (e.getSource()==pvp){
playervsplayer.testing();
}
else if (e.getSource()==pvc){
playervscomputer.testing_c();
}
}
}
我之所以不将窗口背景设置为背景图像,是因为它只需要一种颜色,所以我必须设置颜色,然后在其顶部添加背景。然后是后面的文本和按钮超过背景图像的顶部。所以任何帮助都会很好,谢谢你的时间和精力。