Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么不是';在这个程序中的任何一点调用paint()方法吗?_Java_Swing - Fatal编程技术网

Java 为什么不是';在这个程序中的任何一点调用paint()方法吗?

Java 为什么不是';在这个程序中的任何一点调用paint()方法吗?,java,swing,Java,Swing,这是我开始制作的益智游戏的代码。我试图让它在屏幕中间显示“暂停”,但是无法让它工作。事实证明,即使使用各种重新绘制(),也不会发生任何事情。为什么?是不是因为类本身实际上没有扩展JPanel或JFrame package main; import java.awt.Color; import java.awt.Container; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event

这是我开始制作的益智游戏的代码。我试图让它在屏幕中间显示“暂停”,但是无法让它工作。事实证明,即使使用各种重新绘制(),也不会发生任何事情。为什么?是不是因为类本身实际上没有扩展JPanel或JFrame

package main;

import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class PuzzleSquares implements ActionListener, KeyListener, Runnable {
boolean running = false;
boolean inGame = false;
boolean paused = false;

JFrame frame = new JFrame();
JPanel menu = new JPanel();
JPanel game = new JPanel();

Thread thread;

public PuzzleSquares() {    
    frame.requestFocus();
    frame.setSize(500, 500);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setTitle("Just another puzzle game");

    addMenu();

    frame.setLocationRelativeTo(null);
    frame.setResizable(false);
    frame.setVisible(true);
}

public void addMenu() {
    menu.setLayout(new BoxLayout(menu, BoxLayout.Y_AXIS));
    menu.setFocusable(true);
    menu.setBackground(Color.GRAY);

    createButton("START", menu);
    createButton("HIGH SCORES", menu);
    createButton("EXIT", menu);

    frame.revalidate();
    frame.add(menu);
}

public void addGame() {
    game.setBackground(Color.GREEN);
    game.addKeyListener(this);
    game.setFocusable(true);
    game.setPreferredSize(frame.getMaximumSize());

    frame.add(game);
    frame.revalidate();
    game.requestFocus();
}

public void createButton(String title, Container c) {
    JButton button = new JButton(title) {
        {
            setSize(200, 30);
            setMaximumSize(getSize());
        }
    };
    button.setAlignmentX(JPanel.CENTER_ALIGNMENT);
    button.addActionListener(this);
    button.setActionCommand(title);

    c.add(button);
}

public synchronized void start() {
    if (running) { return; }

    running = true;

    thread = new Thread(this);
    thread.start();
}

public synchronized void stop() {
    if (!running) { return; }

    running = false;

    try { thread.join(); } catch (Exception e) {}
}

@Override
public void run() {
    while (running) {

    }
}

public void paint(Graphics g) {
    System.out.println("Hi");
    if (paused) {
        g.setColor(Color.BLACK);
        for (int i=0;i<100;i++) {
            g.drawLine(i, i+1, i, i+1);
        }
    }
}

@Override
public void actionPerformed(ActionEvent e) {
    if (e.getActionCommand().equals("START")) {
        System.out.println("Start");
        frame.remove(menu);
        addGame();
    }
    if (e.getActionCommand().equals("HIGH SCORES")) {
        System.out.println("High Scores");
    }
    if (e.getActionCommand().equals("EXIT")) {
        System.out.println("Exit");
    }
}

@Override
public void keyTyped(KeyEvent e) {

}

@Override
public void keyPressed(KeyEvent e) {
    if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
        if (!paused) {
            System.out.println("Pause");
            paused = true;
        } else {
            paused = false;
        }
        game.repaint();
    }

}

@Override
public void keyReleased(KeyEvent e) {

}

public static void main(String[] args) {
    PuzzleSquares ps = new PuzzleSquares();
    ps.start();
}
}
packagemain;
导入java.awt.Color;
导入java.awt.Container;
导入java.awt.Graphics;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.event.KeyEvent;
导入java.awt.event.KeyListener;
导入javax.swing.BoxLayout;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
公共类实现ActionListener、KeyListener、Runnable{
布尔运行=假;
布尔inGame=false;
布尔值=假;
JFrame=新JFrame();
JPanel菜单=新建JPanel();
JPanel游戏=新JPanel();
螺纹;
公共拼图({
frame.requestFocus();
框架。设置尺寸(500500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle(“只是另一个益智游戏”);
添加菜单();
frame.setLocationRelativeTo(空);
frame.setresizeable(false);
frame.setVisible(true);
}
公共void addMenu(){
menu.setLayout(新的BoxLayout(menu,BoxLayout.Y_轴));
menu.setFocusable(true);
菜单.背景(颜色.灰色);
创建按钮(“开始”,菜单);
创建按钮(“高分”,菜单);
创建按钮(“退出”,菜单);
frame.revalidate();
frame.add(菜单);
}
公共游戏{
游戏。挫折背景(颜色。绿色);
game.addKeyListener(这个);
game.setFocusable(true);
game.setPreferredSize(frame.getMaximumSize());
frame.add(游戏);
frame.revalidate();
game.requestFocus();
}
公共void createButton(字符串标题,容器c){
JButton按钮=新JButton(标题){
{
设置大小(200,30);
setMaximumSize(getSize());
}
};
按钮.设置对齐X(JPanel.中心对齐);
addActionListener(这个);
按钮。setActionCommand(标题);
c、 添加(按钮);
}
公共同步的void start(){
if(正在运行){return;}
运行=真;
线程=新线程(此);
thread.start();
}
公共同步无效停止(){
如果(!running){return;}
运行=错误;
尝试{thread.join();}catch(异常e){}
}
@凌驾
公开募捐{
(跑步时){
}
}
公共空间涂料(图g){
System.out.println(“Hi”);
如果(暂停){
g、 设置颜色(颜色为黑色);

对于(inti=0;i基本上,您的类是不可绘制的,它不会扩展到框架可以绘制的任何内容(例如
JComponent
JPanel

如果你试着做一些像

@Override
public void paint(Graphics g) {
    super.paint(g);
    System.out.println("Hi");
    if (paused) {
        g.setColor(Color.BLACK);
        for (int i=0;i<100;i++) {
            g.drawLine(i, i+1, i, i+1);
        }
    }
}
@覆盖
公共空间涂料(图g){
超级油漆(g);
System.out.println(“Hi”);
如果(暂停){
g、 设置颜色(颜色为黑色);

对于(inti=0;iAdd
@Override
到您上方的
paint
方法,或者甚至尝试调用
super.paint
因此,即使我有一个JPanel,“game”,它也无法绘制到该JPanel?但是
game
实际上做了什么?什么都没有,它只是一个
JPanel
,您
paint
方法不会“神奇地”要与
JPanel
相关联,您需要从
JPanel
进行物理扩展,以覆盖它的功能,这是基本的OO。。。