Java-Gui按钮未显示

时间:2017-12-14 03:53:43

标签: java user-interface button

我已经查找了一些可能的问题答案,并且只有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();
        }

    }


}

我之所以不将窗口背景设置为背景图像,是因为它只需要一种颜色,所以我必须设置颜色,然后在其顶部添加背景。然后是后面的文本和按钮超过背景图像的顶部。所以任何帮助都会很好,谢谢你的时间和精力。

0 个答案:

没有答案