java - Java Swing:如何在自定义的 Jbutton 上设置文本?
问题描述
这是我的 JButton 代码:
JButton Savebtn = new JButton();//("Save");
Savebtn.setFont(btnFont);
Savebtn.setOpaque(false);
Savebtn.setContentAreaFilled(false);
Savebtn.setBorder(null);
Savebtn.setMargin(new Insets(0, 0, 0, 0));
Savebtn.setIcon(new ImageIcon("src/Pic2/menubtn0.png"));
Savebtn.setPressedIcon(new ImageIcon("src/Pic2/menubtn1.png"));
//Savebtn.setText("Save");
效果是这样的:
我试图这样做:
JButton Savebtn = new JButton();//("Save");
Savebtn.setFont(btnFont);
Savebtn.setOpaque(false);
Savebtn.setContentAreaFilled(false);
Savebtn.setBorder(null);
Savebtn.setMargin(new Insets(0, 0, 0, 0));
Savebtn.setIcon(new ImageIcon("src/Pic2/menubtn0.png"));
Savebtn.setPressedIcon(new ImageIcon("src/Pic2/menubtn1.png"));
Savebtn.setText("Save");
文字没有出现,右侧出现一条白线。任何人都可以帮我解决这个问题吗?
PS:我不能只把文字放在我的图片上,因为我要显示的按钮文字与我的程序有关。
按钮图片:
解决方案
我把你的代码片段放在我创建的 GUI 中。
这就是我想出的。
现在,它不是一个响应速度非常快的按钮。你无法判断它是否被按下。
我所做的是注释掉所有不寻常的 JButton 方法,并确保我可以显示一个普通的 JButton。
然后我一次取消注释一行并进行测试。
测试,测试,测试。
这是我测试的代码。
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Insets;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class CustomButtonGUI implements Runnable {
public static void main(String[] args) {
SwingUtilities.invokeLater(new CustomButtonGUI());
}
@Override
public void run() {
JFrame frame = new JFrame("Custom Button");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(createButtonPanel(), BorderLayout.CENTER);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
private JPanel createButtonPanel() {
JPanel panel = new JPanel(new BorderLayout());
panel.setPreferredSize(new Dimension(300, 100));
Font font = panel.getFont().deriveFont(48f);
JButton saveButton = new JButton("Save");
saveButton.setFont(font);
saveButton.setOpaque(false);
saveButton.setContentAreaFilled(false);
saveButton.setBorder(null);
saveButton.setMargin(new Insets(0, 0, 0, 0));
// saveButton.setIcon(new ImageIcon("src/Pic2/menubtn0.png"));
// saveButton.setPressedIcon(new ImageIcon("src/Pic2/menubtn1.png"));
//
panel.add(saveButton, BorderLayout.CENTER);
return panel;
}
}
推荐阅读
- docker - Docker:来自守护程序的错误响应:创建临时租约时出错
- java - 使用 Java Mail API 创建 S/MIME
- javascript - 根据匹配的类和内容隐藏和显示 DIV
- reactjs - 如何防止 React / React Native 在 React Native 调试器中自动将堆栈跟踪附加到我的控制台警告
- docker - 如何授予非特权用户在节点 docker 容器中运行 conda 的访问权限?
- string - grep 找到文件后文件没有被复制
- regex - 为什么这个 sed 表达式没有按预期删除带有韩语的行?
- swift - 如何在我的 podspec 中使用 TensorFlow 实验框架?
- c# - WCF 获取请求响应
- maven - 升级到5.0.0时无法生成QueryDSL的QClass(com.querydsl.sql.Configuration未注册)