我已经为我所创建的对象创建了一个defaultlistcellrender,但到目前为止,它很难向JList添加对象。我附上任何建议的代码。谢谢!
public class JTabbedPaneTester extends JFrame
{
private List<Human> members = new ArrayList<Human>();
private JList newbie = new JList();
private DefaultListModel model = new DefaultListModel();
public JTabbedPaneTester() throws FileNotFoundException
{
super("JTabbedPane Demo");
JTabbedPane tabbedPane = new JTabbedPane();
JPanel gladiator = new JPanel();
getContentPane().add(gladiator);
tabbedPane.addTab("Gladiator", null, Gladiator, "");
Box listOfPlayers = Box.createVerticalBox();
listOfPlayers.add(Box.createRigidArea(new Dimension(100,100)));
listOfPlayers.setBorder(new TitledBorder("List of Players"));
JScrollPane playerViewer = new JScrollPane();
playerViewer.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
listOfPlayers.add(playerViewer);
JButton AddIndividual = new JButton("Add a Player");
listOfPlayers.add(addIndividual);
gladiator.add(listOfPlayers);
final HumanListModel modelx = new HumanListModel();
final JTable newbiex = new JTable(modelx);
newbiex.setDefaultRenderer(Human.class, new HumanRenderer());
playerViewer.setViewportView(newbiex);
addIndividual.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
Human temp;
try {
temp = new Human();
modelx.addHuman(temp);
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
}
});
add(tabbedPane);
}
}
这里的渲染器有人在这里很好地帮助了我
class HumanRenderer extends DefaultListCellRenderer
{
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus)
{
JLabel label = new JLabel();
if (value != null)
{
Human human = (Human) value;
label.setText(human.getSurname() + ", " + human.getFirstName());
}
return label;
}
}
答案 0 :(得分:2)
您需要将对象添加到模型中,而不是添加到jlist面板。添加您用于组件的。尝试从jlist获取模型并使用模型的addElement。
答案 1 :(得分:0)
您正在使用使用DefaultListModel
的{{1}}。我发现您的代码中没有任何部分实际使用了您的DefaultListCellRenderer
。你必须自己编写模型。
HumanRenderer
对于public class HumanListModel extends DefaultListModel
{
private ArrayList<Human> data;
public HumanListModel()
{
super();
data = new ArrayList<Human>();
}
public void addHuman(Human h)
{
// add new human to the model
data.add(h);
fireTableStructureChanged();
}
public void removeHuman(Human h)
{
data.remove(h);
fireTableStructureChanged();
}
@Override
public int getColumnCount()
{
// the number of columns you want to display
return 1;
}
@Override
public int getRowCount()
{
return data.size();
}
@Override
public Object getValueAt(int row, int col)
{
return (row < data.size()) ? data.get(row) : null;
}
@Override
public String getColumnName(int col)
{
return "Human";
}
@Override
public Class getColumnClass(int col)
{
return Human.class;
}
}
,您只需设置JTable
并定义渲染器即可。之后,您应该在模型上直接对数据进行所有更改。使用:HumanListModel
和model.addHuman()
。他们发射了model.removeHuman()
为了重新绘制而监听的必要事件。
JTable
我希望它有效......