繁体   English   中英

为什么这个JFrame的大小不正确?

[英]Why is this JFrame not being sized right?

由于某种原因,此JFrame正在绘制500 x 470像素。 即使从最基本的角度来看,它也使我的计算步履蹒跚。 该代码是如此基础,我认为这将是准确的。 我只是想念一些明显的东西吗? 似乎setSize以前一直可以工作,所以有什么不同。 我可以不使用game.WINDOW_WIDTH吗?

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class Game extends JPanel implements KeyListener, MouseListener {

    //Gamestate stats
    int level = 0; // 0 is menu, 1 is options, 2 is win, 3 is death, 4 is level 1

    final String WINDOW_TITLE = "Platformer a.v.0.1"; // window stats
    final int WINDOW_WIDTH = 500;
    final int WINDOW_HEIGHT = 500;

    int mouseX; // stats for mouse, keyboard, ect
    int mouseY;

    // Level 0 buttons, parameters, ect
    int lv0ButtonOneX = WINDOW_WIDTH/4;
    int lv0ButtonOneY = WINDOW_WIDTH/2;
    int lv0ButtonOneS = 50;

    public static void main(String[] args) {
        Game game = new Game();

        JFrame window = new JFrame(game.WINDOW_TITLE);
        window.setSize(game.WINDOW_WIDTH,game.WINDOW_HEIGHT);
        window.setVisible(true);
        window.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        window.add(game);
        game.addKeyListener(game);
        game.addMouseListener(game);
        game.requestFocusInWindow();

        window.setLocationRelativeTo(null);
        while(true) {
            game.repaint();
            game.customUpdate();
        }
    }

    public void customUpdate() {
        if(level == 0) {
            if(mouseX > lv0ButtonOneX &&
                    mouseX < lv0ButtonOneX + lv0ButtonOneS &&
                    mouseY < lv0ButtonOneY + lv0ButtonOneS &&
                    mouseY > lv0ButtonOneY) {
                level = 4;
            }
        }
    }

    public void paint(Graphics g) {
        if(level == 0) {
            g.setColor(Color.BLACK);
            g.fillRect(0,0,WINDOW_WIDTH,WINDOW_HEIGHT); // draw window          needs to be first in order to be drawn over

            g.setColor(Color.ORANGE);
            g.fillRect(lv0ButtonOneX,lv0ButtonOneY,lv0ButtonOneS,lv0ButtonOneS); // draw buttons

            g.setColor(Color.BLUE);
            g.drawString("Start",lv0ButtonOneX + lv0ButtonOneS/4,lv0ButtonOneY + lv0ButtonOneS/2);
        }
        if(level == 4) {
            g.setColor(Color.GREEN);
            g.fillRect(0,0,WINDOW_WIDTH,WINDOW_HEIGHT); // draw window          needs to be first in order to be drawn over

            g.setColor(Color.ORANGE);
            g.fillRect(0,WINDOW_HEIGHT-20,WINDOW_WIDTH,20); // creates floor at bottom - 20 for standing.
        }
    }

    @Override
    public void keyTyped(KeyEvent e) {

    }

    @Override
    public void keyPressed(KeyEvent e) {

    }

    @Override
    public void keyReleased(KeyEvent e) {

    }

    @Override
    public void mouseClicked(MouseEvent e) {

    }

    @Override
    public void mousePressed(MouseEvent e) {
        mouseX = e.getX();
        mouseY = e.getY();
    }

    @Override
    public void mouseReleased(MouseEvent e) {

    }

    @Override
    public void mouseEntered(MouseEvent e) {

    }

    @Override
    public void mouseExited(MouseEvent e) {

    }
}

问题:

    window.setSize(game.WINDOW_WIDTH,game.WINDOW_HEIGHT);
    window.setVisible(true);
    window.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);


    window.add(game);
    game.addKeyListener(game);
    game.addMouseListener(game);
    game.requestFocusInWindow();

解:

    window.setSize(game.WINDOW_WIDTH,game.WINDOW_HEIGHT);
    window.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    window.add(game);
    game.addKeyListener(game);
    game.addMouseListener(game);
    game.requestFocusInWindow();

    window.setVisible(true);

在向其添加对象之前,不要使JFrame可见。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM