java - 更改滚动窗格内 JList 中 JButton 的名称
问题描述
我有一个带有滚动窗格和 JList 的 JFrame。由于某种原因,我无法重命名这些按钮,并且最初设置的文本不存在。
private DefaultListModel<JButton> model = new DefaultListModel<>();
private JList<JButton> emailList = new JList<>(model);
private JButton test = new JButton("test");
在构造函数中:
JScrollPane scroll = new JScrollPane();
scroll.getViewport().setView(emailList);
scroll.setMinimumSize(new Dimension(500, 350));
add(scroll, BorderLayout.SOUTH);
model.addElement(test);
这个按钮的名字最终是
javax.swing.JButton[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.5,border=javax.swing.plaf.BorderUIResource$CompoundBorderUIResource@1de0aca6,flags=296,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom=2,right=14],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=testar,defaultCapable=true]
解决方案
项目的显示文本JList
是通过调用toString()
这些项目得出的。JButton.toString()
返回那个长文本“javax.swing.JButton[,0,0,0x0,invalid...”。所以,这就是为什么你会在JList
项目上得到这么长的文本。
解决这个问题的一种方法是编写你自己的类,在你的类中扩展JButton
和覆盖toString()
。就像下面的例子一样。
笔记:
如果您希望JButton
从列表项中获得功能(例如单击按钮),那么您将不得不做更多的事情。您将必须编写一个自定义单元格渲染器并在您的JList
.
import javax.swing.*;
public class ButtonList
{
public static void main(String[] args)
{
CustomButton test = new CustomButton("test");
CustomButton b2 = new CustomButton("button 2");
CustomButton b3 = new CustomButton("button 3");
DefaultListModel<CustomButton> model = new DefaultListModel<>();
model.addElement(test);
model.addElement(b2);
model.addElement(b3);
JList<CustomButton> emailList = new JList<>(model);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new JScrollPane(emailList));
frame.pack();
frame.setLocation(300, 300);
frame.setVisible(true);
}
}
class CustomButton extends JButton
{
CustomButton(String text)
{
super(text);
}
@Override
public String toString()
{
return getText();
}
}
输出:
推荐阅读
- javascript - 使用 js reduce() 创建键值对并创建一个数组作为值
- c# - 使用 SelectListItem 设置 DropDownList 的选定值
- angular5 - 如何在 ng2-chart 条形图中删除条形顶部的百分比计算
- php - 在 Laravel API 中重用重置密码
- oauth-2.0 - REST API 上的 OAuth 2.0 与第三方提供商
- azure - 通过 ARM 模板将证书应用于 ASE ILB 失败
- regex - 如何在 spark hive 中应用带有 unicode 字符的 regexp_replace
- firebase - 浏览 Firebase Firestore 中的读取配额
- php - 在 IIS 重新启动之前,使用 PHP exec 无头运行 Google Chrome 不会返回输出
- sql - 如何使用参数更快地进行 sql 查询?