Создание кнопки - PullRequest
       13

Создание кнопки

0 голосов
/ 06 февраля 2019

Я создаю меню для своей игры, в котором я могу нажать кнопку «Пуск» для навигации по экранам.Я пытаюсь реализовать отдельную кнопку для класса, однако, как я изложил класс CustomButtons, он работает таким образом, что я могу сделать только одну кнопку, которая имеет функцию, для решения этой проблемы я решил сделатьотдельный метод «Кнопки», который содержит параметры для кнопки.Я вызвал это в компоненте рисования, чтобы гарантировать, что он отображается на экране, однако на экране отображается только текст «START».Цвет фона кнопки, границ, шрифта и т. Д. Не изменяется вместе с вызовом.

public class CustomButton extends JButton implements MouseListener {

    Dimension size = new Dimension(100, 50);

    boolean hover = false;
    boolean click = false;
    boolean isMethodCalled = false;

    String text = "";

    public CustomButton(String text, Button bb) {
        setVisible(true);
        setFocusable(true);
        setContentAreaFilled(false);
        setBorderPainted(false);

        this.text = text;

        addMouseListener(this);
    }

    public void Button(Graphics g) {
        g.setColor(new Color(255, 255, hover ? 180 : 102 ));
        g.fillRect(0, 0, 250, 7);
        g.fillRect(0, 0, 7, 150);

        g.setColor(Color.ORANGE); // button background color
        g.fillRect(14, 14, 222, 122);
        g.setColor(Color.WHITE); // text color 
        g.setFont(Font.decode("arial-BOLD-24"));

        FontMetrics metrics = g.getFontMetrics();
        int width = metrics.stringWidth(text);
        g.drawString(text, 17, 40);
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        Button menu = new Button();
    }

    public void setButtonText(String text) {
        this.text = text;
    }
    public String getButtonText(String text) {
        return text;
    }

    public void mouseEntered(MouseEvent e) {
        hover = true;
    }
    public void mouseExited(MouseEvent e) {
        hover = false;
    }
    public void mousePressed(MouseEvent e) {
        click = true;
    }
    public void mouseReleased(MouseEvent e) {
        click = false;
    }
    public void mouseClicked(MouseEvent e) {
    }
}

Кто-нибудь знает, как я могу сделать так, чтобы кнопка, когда она вызывается изМетод «Кнопки» работает, поэтому он отображается точно так, как и должно быть, если бы все графические настройки должны были быть установлены в методе paintComponent?

Это не то, что происходит в настоящее время.Я не хочу, чтобы это произошло:

Dont want this to happen

Вот что я хочу, чтобы произошло с кнопкой:

This is what I want

1 Ответ

0 голосов
/ 06 февраля 2019

Чтобы иметь пользовательский внешний вид, который вам нужен, лучше, чтобы ваша пользовательская кнопка расширялась JLabel.Приведенный ниже код демонстрирует, как мы можем написать пользовательскую кнопку, расширяя JLabel.

. Эта кнопка поддерживает события нажатия.Мы можем добавить ActionListener s, чтобы прослушивать события кликов.Он меняет цвет фона на коричневый, когда пользователь наводит на него курсор мыши.

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.List;

public class CustomButton extends JLabel implements MouseListener {

  private List<ActionListener> actionListeners = new ArrayList<>();

  public CustomButton(String text) {
    super(text);
    setOpaque(true);
    setForeground(Color.white);
    setBackground(Color.orange);
    setFont(getFont().deriveFont(40.0f));
    addMouseListener(this);
  }

  public void addActionListener(ActionListener listener) {
    actionListeners.add(listener);
  }

  public void removeActionListener(ActionListener listener) {
    actionListeners.remove(listener);
  }

  @Override
  public void mouseClicked(MouseEvent e) {
    for (ActionListener listener : actionListeners) {
      listener.actionPerformed(new ActionEvent(this, 0, "click"));
    }
  }

  @Override
  public void mousePressed(MouseEvent e) {
  }

  @Override
  public void mouseReleased(MouseEvent e) {
  }

  @Override
  public void mouseEntered(MouseEvent e) {
    setBackground(new Color(185, 122, 87));
  }

  @Override
  public void mouseExited(MouseEvent e) {
    setBackground(Color.orange);
  }

  public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setBackground(Color.darkGray);
    frame.getContentPane().setLayout(new FlowLayout());

    CustomButton customButton = new CustomButton("START");
    customButton.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        JOptionPane.showMessageDialog(frame, "Button clicked");
      }
    });

    frame.getContentPane().add(customButton);
    frame.setBounds(300, 200, 400, 300);
    frame.setVisible(true);
  }
}
...