我在这里遇到了一个问题,我创建了一个actionListener,它旨在创建一个随机的人,并将其添加到JList中以显示在JScrollPane上。到目前为止,一切都很顺利,只是每当我单击JButton添加一个新的人员时,JList不会添加到当前列表中,而是每次都会替换它,因此JList上只显示一个项目。我知道问题发生在哪里,您将立即在actionevent行中看到它。不管怎样,谢谢你的帮助我的朋友们!
private static final JTextArea PlayerList = new JTextArea(30, 100);
private JList newbie;
private List<Human> members = new ArrayList<Human>();
private JTextArea Area;
private String[] listString;
private String[] newString;
private ArrayList<String> list = new ArrayList<String>();
private ArrayList<String> zz = new ArrayList<String>();
public JTabbedPaneFrame() throws FileNotFoundException
{
super("JTabbedPane Demo");
JTabbedPane tabbedPane = new JTabbedPane();
JPanel Gladiator = new JPanel();
getContentPane().add(Gladiator);
/////////////Tabbed Pane 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"));
Area = new JTextArea(20, 15);
Area.setLineWrap(true);
Area.setWrapStyleWord(false);
final JList newbie = new JList();
JScrollPane PlayerViewer = new JScrollPane(newbie);
PlayerViewer.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
ListOfPlayers.add(PlayerViewer);
Gladiator.add(ListOfPlayers);
/////////////Vertical Box between Text and Tabbed Profile//////
Box Randomer = Box.createVerticalBox();
Randomer.setBorder(new TitledBorder("Randomize or Add Gladiator"));
JButton AddIndividual = new JButton("Add a Player");
Randomer.add(AddIndividual);
Gladiator.add(Randomer);
AddIndividual.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
String x = "";
String y = "";
String z = "";
String ee = "";
ArrayList<String> listx = new ArrayList<String>();
ArrayList<String> zzx = new ArrayList<String>();
JList newbiex;
Human temp;
try {
temp = new Human();
x = temp.toString();
y = temp.getSurname();
z = temp.getFirstName();
listx.add(x);
ee = String.format(y + ", " + z );
zzx.add(ee);
listString = new String[zzx.size()];
listString = zzx.toArray(listString);
newbiex = new JList(zzx.toArray());
newbie.setModel(newbiex.getModel());
members.add(temp);
for(String W: listString) /////testing diff method here////
{
Area.append(W);
}
}
catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
add(tabbedPane);
/////////////Action Buttons////////////////////
}
}
{
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;
}
}
您正在您的ActionListener
中创建一个新的JList
newbiex
,它永远不会添加到JFrame
中。相反,重用原始的JList
newbie
并将新的human
添加到其模型中。使用DefaultListModel
这是可变的。
DefaultListModel<Human> model = new DefaultListModel<>();
JList<Human> newbie = new JList<>(model);
您将需要一个自定义单元格呈现器来显示
JList
中的human
对象。请参见编写自定义单元格呈现器
class HumanRenderer extends DefaultListRenderer {
@Override
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;
}
}
问题内容: 我有填充我的JList的方法,有没有一种方法可以添加JList中的每个项目? 问题答案: 您可以重写JList的getToolTipText(..)方法。 我相信您也可以使用自定义渲染器来调用setToolTipText(…)方法。
问题内容: 我有一个JList,我需要将其放置在滚动窗格中,因为我是从数据库中获取JList的,其值可能会大大增加。我需要能够向下滚动它们,所以我写道: 因为看不到任何ScrollPane,我在做什么错? 问题答案: 该列表已经包含在滚动窗格中,因此您不能将列表添加到主面板。仅滚动窗格。 您做错的另一件事是不使用布局管理器,而是设置组件的边界和大小。不要那样做 让布局管理器为您定位和调整组件的大小
我已经使用Netbeans GUI构建器创建了我的GUI。JList被添加到scrollpane中,如果我硬编码了JList的内容,所有内容都显示得很好。 但是如果我尝试通过动态添加项,则不会出现任何内容。 我只想显示JList中的主题以供视觉使用,其余的都是在后台完成的。
问题内容: 嗨,我必须从一个JList中选择一个元素,将其从第一个元素中删除。我创建的方法仅插入一个元素,覆盖最后一个元素,并且不会从第一个JList中删除所选项目。这是代码: 第一名单 通过此方法填充: 第二个列表,我要在其中插入从第一个列表中删除的项目: 这是无效代码: 谢谢 问题答案: 问题是 您可能要添加一个元素并立即将其删除,因为添加和删除操作都在同一listModel上。 尝试
问题内容: 所以,我想要的是选择一个项目时要运行的另一段代码。但是我的问题是,如何对特定项目实施? 这是我的代码: 我该怎么做才能添加到“车辆”,“自行车/自行车”,“船”,“房屋”,“企业”,“对象”,“工作”,“等级”和“许可证”项中? 问题答案: 如果您希望在选择更改时发生某些事情,则不希望使用MouseListener,而希望使用。它不仅是正确的抽象,而且请记住,不使用鼠标就可以更改选择。
问题内容: 我有一个单击按钮时执行的功能。假设有一个循环将1到10加到。我将该数据添加到中。它完美地工作,并且数字相加。然后我在循环中添加了一个。但是输出是不同的。我想每秒增加1个元素。但是现在它等待10秒,并在第10秒结束时将所有1到10加在一起。我在哪里错了? 问题答案: 您应该在单独的线程中更新列表,否则最终将阻塞事件分发线程。 请尝试以下操作: