我有一个带有滚动窗格和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]
答案 0 :(得分:0)
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();
}
}
输出: