gpt4 book ai didi

java - 制作按钮

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:06:18 24 4
gpt4 key购买 nike

我在这里为我的游戏制作一个菜单,我可以在其中按“开始”按钮浏览屏幕。我正在尝试为该类实现一个单独的按钮,但是我布置 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) {
}
}

任何人都知道我如何才能使按钮一旦从“Buttons”方法中调用就可以正常工作,因此如果所有图形设置都在 paintComponent 方法中设置,它就会完全按照应有的方式显示?

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

Dont want this to happen

这就是我想要按钮发生的事情:

This is what I want

最佳答案

要获得您需要的自定义外观,您的自定义按钮最好扩展 JLabel。下面的代码演示了我们如何通过扩展 JLabel 来编写自定义按钮。

这个按钮支持点击事件。我们可以添加ActionListener来监听点击事件。当用户将鼠标悬停在其上时,它会将背景颜色更改为棕色。

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

关于java - 制作按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54555542/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com