[英]How to make a custom JButton class?
大家好,我正在尋找一種使用Java Swing制作自定義Button的解決方案。 我有一個示例,應該如何顯示,但不顯示按鈕文本。 有人知道錯誤在哪里嗎?
這是JButton類
package custombutton;
import java.awt.*;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
import javax.swing.border.LineBorder;
public class CustomButton extends JButton implements MouseListener {
Dimension size = new Dimension(206, 30);
boolean hover = false;
boolean click = false;
String text;
public CustomButton(String text) {
setVisible(true);
setFocusable(true);
setContentAreaFilled(false);
setBorderPainted(true);
setBorder(new LineBorder(Color.BLACK, 3));
setButtonText(text);
addMouseListener(this);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(new Color(255, 255, 255));
g.fillRect(0, 0, 206, 30);
g.setFont(Font.decode("arial-24"));
FontMetrics metrics = g.getFontMetrics();
int width = metrics.stringWidth(getButtonText());
g.drawString(text, 103 - width / 2, 15);
}
@Override
public Dimension getPreferredSize() {
return size;
}
@Override
public Dimension getMaximumSize() {
return size;
}
@Override
public Dimension getMinimumSize() {
return size;
}
public void setButtonText(String text) {
this.text = text;
}
public String getButtonText() {
return text;
}
@Override
public void mouseEntered(MouseEvent e) {
hover = true;
}
@Override
public void mouseExited(MouseEvent e) {
hover = false;
}
@Override
public void mousePressed(MouseEvent e) {
click = true;
}
@Override
public void mouseReleased(MouseEvent e) {
click = false;
}
@Override
public void mouseClicked(MouseEvent e) {}
}
這里是主要的:
package custombutton;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Main extends JFrame {
public Main() {
JPanel panel = new JPanel();
setTitle("Custom Button");
setSize(400, 100);
setResizable(false);
panel.setBackground(Color.GRAY);
CustomButton button = new CustomButton("Hallo");
panel.add(button);
add(panel);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new Main();
}
}
我認為問題出在setButtonText(text);
代替它,您應該使用setText(text);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.