在滚动窗格内的JList中的JButton上更改名称

时间:2019-03-18 15:27:40

标签: java

我有一个带有滚动窗格和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]

1 个答案:

答案 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();
  }
}

输出:

enter image description here