java中的defaultmode,如何在java中的DefaultListModel中保存数据

我正在尝试使用JList / DefaultListModel创建一个列表,该列表在其自身内部保存数据.

这是我的问题.

DefaultListModel my_docs = new DefaultListModel();

JList my_jlist = new JList(my_docs);

// From here, I add elements to my_docs..

my_docs.addElement("Document 1");

my_docs.addElement("Document 2");

my_docs.addElement("Document 3");

我该怎么做才能在元素中保存每个文档的文本(平均大约4,000个字节),而不是在点击之前分配给另一个变量?

例如,如果我单击列表中的文档2,则文档的文本将分配给变量.如果我点击列表中的文档1,它将执行相同的操作.

很抱歉用这么少的信息询问这个,我只是不知道从哪里开始.

解决方法:

您可以为文档创建包装器.例如,包装器可以公开数据和名称.如果需要,也可以按需加载数据.将包装器的实例添加到列表中.使用文档名称呈现列表的每个条目.选择列表中的条目后,使用所选项目进行操作.这是一个显示文档列表的简单示例.选择文档后,其内容将显示在文本区域中.

import java.awt.BorderLayout;

import java.awt.Component;

import javax.swing.*;

import javax.swing.event.*;

public class TestListModel {

public TestListModel() {

DefaultListModel model = new DefaultListModel();

model.addElement(new DocumentWrapper("Doc 1", "Doc 1 data"));

model.addElement(new DocumentWrapper("Doc 2", "Doc 2 data"));

model.addElement(new DocumentWrapper("Doc 3", "Doc 3 data"));

final JList list = new JList();

final JTextArea output = new JTextArea(5, 40);

list.setModel(model);

list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

list.setCellRenderer(new DocumentWrapperRenderer());

list.getSelectionModel().addListSelectionListener(

new ListSelectionListener() {

@Override

public void valueChanged(ListSelectionEvent e) {

if (!e.getValueIsAdjusting()) {

DocumentWrapper docWrapper = (DocumentWrapper) list

.getSelectedValue();

if (docWrapper != null) {

output.setText(docWrapper.getData());

} else {

output.setText("");

}

}

}

});

JFrame frame = new JFrame("Document list");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.add(new JScrollPane(list));

frame.add(output, BorderLayout.SOUTH);

frame.setLocationByPlatform(true);

frame.pack();

frame.setVisible(true);

}

public class DocumentWrapper {

private String data;

private String name;

public DocumentWrapper(String name, String data) {

this.name = name;

this.data = data;

}

public String getData() {

return data;

}

public String getName() {

return name;

}

}

public static class DocumentWrapperRenderer extends DefaultListCellRenderer {

@Override

public Component getListCellRendererComponent(JList list, Object value,

int index, boolean isSelected, boolean hasFocus) {

if (value instanceof DocumentWrapper) {

return super.getListCellRendererComponent(

list, ((DocumentWrapper) value).getName(), index,

isSelected, hasFocus);

}

return super.getListCellRendererComponent(list, value, index,

isSelected, hasFocus);

}

}

public static void main(String args[]) {

SwingUtilities.invokeLater(new Runnable() {

@Override

public void run() {

new TestListModel();

}

});

}

}

标签:jlist,java,swing,defaultlistmodel

来源: https://codeday.me/bug/20190901/1780102.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值