Пользовательский класс кнопок без функциональности Java - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь активно рендерить и обнаружил, что использование JButtons было не очень хорошим, поэтому я решил создать свой собственный класс.У меня нет большого опыта работы с ActionListeners, и я пытаюсь использовать демонстрацию, которую я нашел в Интернете.Я делаю свою собственную версию примеров второго и третьего классов, опубликованных Ко Вей https://coderanch.com/t/342333/java/Custom-Buttons.

Все отображается хорошо, но ничего не происходит при нажатии

package com.whycom.engine;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Vector;

import javax.swing.JPanel;

public class Button extends JPanel implements MouseListener
{
    private static final long serialVersionUID = 1L;

    private int width;
    private int height;
    private int xPos;
    private int yPos;
    private String text;
    private Color textColor;
    private Color bgColor;
    private Color borderColor;
    private Font font;
    private Color hoverColor;
    private boolean hover;

    private Vector< ActionListener > listeners;


    public Button( int xPos, int yPos, int width, int height, String text,
            Font font, Color textColor, Color bgColor, Color borderColor,
            Color hoverColor )
    {
        super();

        this.width = width;
        this.height = height;
        this.text = text;
        this.textColor = textColor;
        this.bgColor = bgColor;
        this.borderColor = borderColor;
        this.xPos = xPos;
        this.yPos = yPos;
        this.font = font;
        this.hoverColor = hoverColor;

        listeners = new Vector< ActionListener >();
        addMouseListener( this );

    }


    public void render( Graphics g )
    {
       //omitted because it shouldn't be the problem
    }


    @Override
    public void mouseClicked( MouseEvent arg0 )
    {
        fireEvent( new ActionEvent( this, 0, text ) );
    }


    @Override
    public void mouseEntered( MouseEvent arg0 )
    {}


    @Override
    public void mouseExited( MouseEvent arg0 )
    {}


    @Override
    public void mousePressed( MouseEvent arg0 )
    {}


    @Override
    public void mouseReleased( MouseEvent arg0 )
    {}


    private void fireEvent( ActionEvent event )
    {
        for( int i = 0; i < listeners.size(); i++ )
        {
            ActionListener listener = ( ActionListener ) listeners
                    .elementAt( i );
            listener.actionPerformed( event );
        }
    }


    public void addActionListener( ActionListener listener )
    {
        listeners.addElement( listener );
    }


    public void removeActionListener( ActionListener listener )
    {
        listeners.removeElement( listener );
    }
}

При созданиимой класс состояний Я делаю это

    menu1 = new Button( 0, 0, 400, 100, "Test", buttonFont, Color.white,
            Color.black, Color.white, Color.blue );

    menu1.addActionListener( new ActionListener()
    {
        public void actionPerformed( ActionEvent e )
        {
            System.out.println( "I am clicked!" );
        }
    } );

У меня есть метод getPreferredSize в Button, а также помещается this.add (menu1) в мой конструктор состояний, так как состояние расширяет JPanel.Ни один из них ничего не сделал.

Мне удалось разделить мой проект до 4 классов, которые повторяют проблему https://github.com/CloudyNinja/StackOverflowButtonQ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...