加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java-制作按钮

发布时间:2020-12-14 19:25:45 所属栏目:Java 来源:网络整理
导读:我在这里为我的游戏制作菜单,可以按“开始”按钮在屏幕上导航.我正在尝试为该类实现一个单独的按钮,但是按照我布置CustomButtons类的方式,它只能以一个具有功能的按钮来工作,为了解决此问题,我决定制作一个单独的“按钮”方法,其中包含按钮的参数.我在绘画组

我在这里为我的游戏制作菜单,可以按“开始”按钮在屏幕上导航.我正在尝试为该类实现一个单独的按钮,但是按照我布置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,250,7);
        g.fillRect(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) {
    }
}

任何人都知道我该怎么做,以便一旦从“ Buttons”方法中调用该按钮后该按钮便能正常工作,以便在将所有图形设置都设置在paintComponent方法中的情况下,该按钮的显示效果应与原来一样.

这不是当前正在发生的事情.我不希望这种情况发生:

这是我想对按钮进行的??操作:

最佳答案
要获得所需的自定义外观,最好是自定义按钮扩展JLabel.下面的代码演示了如何通过扩展JLabel来编写自定义按钮.

此按钮支持单击事件.我们可以添加ActionListeners来监听点击事件.当用户将鼠标悬停在其上方时,它将背景颜色更改为棕色.

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,"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);
  }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读