Хобрук: Ваш путь к мастерству в программировании

Мой экран не будет перерисовываться, несмотря на щелчок по прямоугольнику

У меня есть код, настроенный на то, где для логического значения boxDetect будет установлено значение true, если мышь щелкнута внутри прямоугольника startButton. Остальное просто форматирование ничего особенного! Это начальный экран до того, как вы нажмете внутри прямоугольника, и после того, как вы нажмете внутри прямоугольника, он должен перекрасить экран в прямоугольник в точках 400 400.

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.*;

public class spaceInvadersIntroScreen implements MouseListener
{
    private JFrame frame;
    private MyPanel panel;
    private double startButtonX = 0;
    private double startButtonY = 0;
    private Rectangle startButton;
    private Boolean boxDetect = false;

public static void main(String[] args){ new spaceInvadersIntroScreen(); }

public spaceInvadersIntroScreen()
{
    frame = new JFrame("Space Invaders");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    startButtonX = screenSize.getWidth() / 2; //Finds the X value of the center of the screen
    startButtonY = screenSize.getHeight() / 2; //Finds the Y value of the center of the screen
    frame.setSize(screenSize); //width and height
    panel = new MyPanel();
    frame.getContentPane().add(panel);
    frame.setVisible(true);
    startButton = new Rectangle((int)(startButtonX - 200), (int)(startButtonY - 75), 400, 150); //Creates Rectangle in the middle of the screen
}

class MyPanel extends JPanel
{
    private static final long serialVersionUID = 1L;

    public void paint(Graphics g)
    {

    if(boxDetect == false)
    {
        Graphics2D g2d = (Graphics2D) g; 
        //Background 
        g2d.setColor(Color.BLACK);
        g2d.fillRect(0,0, 1440, 870);

        //Code for an X centered title regardless of the screen length

        String title = "SPACE INVADERS";
        Font textFont = new Font("monospaced", Font.BOLD, 150);
        FontMetrics textMetrics = g2d.getFontMetrics(textFont);  
        g2d.setFont(textFont);   

        int centeredX = (this.getWidth()/2) - (textMetrics.stringWidth(title)/2);   

        //Prints SPACE INVADERS to the screen
        g2d.setColor(Color.WHITE);
        g2d.setFont(textFont);
        g2d.drawString(title, centeredX, 200);

        //draw the Button
        g2d.setColor(Color.white);
        g2d.fill(startButton); 
    }

    else
    {
        g.setColor(Color.black);
        g.drawRect(400, 400, 400, 400);
    }

    }
}

@Override
public void mouseReleased(MouseEvent e) 
{
    double xCoord = e.getX();
    double yCoord = e.getY();
    if(startButton.contains(xCoord,yCoord) == true)
    {
        boxDetect = true;
    }
    panel.repaint();
}

@Override
public void mouseClicked(MouseEvent e) {}

@Override
public void mousePressed(MouseEvent e) {}

@Override
public void mouseEntered(MouseEvent e) {}

@Override
public void mouseExited(MouseEvent e) {}
}

  • Спасибо! Я новый программист, это мой первый год, поэтому я всегда забываю о мелочах. 27.04.2013

Ответы:


1

Вам нужно добавить MouseListener, чтобы он работал. Вопрос: Куда вы звоните addMouseListener(...)? Ответ: нет. Решение: вызовите этот метод, чтобы добавить MouseListener к компоненту, который в нем нуждается.

27.04.2013
Новые материалы

HMTL - Многозадачное обучение для решения задач НЛП
Достижение результатов SOTA путем передачи знаний между задачами Область обработки естественного языка включает в себя десятки задач, среди которых машинный перевод, распознавание именованных..

Решения DBA Metrix
DBA Metrix Solutions предоставляет удаленного администратора базы данных (DBA), который несет ответственность за внедрение, обслуживание, настройку, восстановление базы данных, а также другие..

Начало работы с Блум
Обзор и Codelab для генерации текста с помощью Bloom Оглавление Что такое Блум? Некоторые предостережения Настройка среды Скачивание предварительно обученного токенизатора и модели..

Создание кнопочного меню с использованием HTML, CSS и JavaScript
Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

Внедрите OAuth в свои веб-приложения для повышения безопасности
OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

Классы в JavaScript
class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

Как свинг-трейдеры могут использовать ИИ для больших выигрышей
По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..