- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我看过一些关于这个主题的帖子,但没有一个解决方案对我有用。我有一个名为 partsListRight
的 DefaultListModel
,它是我的窗口类的成员,我有一个名为 configuration 的内部类,其中包含一个 ArrayList
,我想要填充 partsListRight
中的项目:
@XmlRootElement
class Configuration{
@XmlElement
private ArrayList<String> Component;
public Configuration(){
Component = new ArrayList<String>();
Object[] partsList = partsListRight.toArray();
for (Object object : partsList){
Component.add((String)object);
}
}
}
在我的窗口类中,我有一个save()
方法,它为ArrayList
组件编码:
public void save() {
Configuration configuration = new Configuration();
try{
File file = new File("C:\\configuration.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(Configuration.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.marshal(configuration, file);
jaxbMarshaller.marshal(configuration, System.out);
} catch(JAXBException e){
e.printStackTrace();
}
}
但是,当我尝试运行此方法时,我收到错误消息,指出 Configuration 是一个非静态内部类,而 JAXB 无法处理这些错误。我不确定如何解决这个问题。非常感谢任何帮助!
最佳答案
您不需要内部类。我明白你这样做的原因是因为你想访问 DefaultListModel
,但这是不必要的。您的 JAXB 模型类不必了解任何有关 gui 方面的信息。它只是简单地意味着建模。
也就是说,您的设计有点不对劲。相反,您应该将 Configuration
设为自己的类文件。您也不需要 Configuration
类的构造函数。只需为 List
提供一个 getter
,并通过 save()
方法填充它。像这样的东西:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"component"
})
@XmlRootElement(name = "Configuration")
public class Configuration {
protected List<String> component;
public List<String> getComponent() {
if (component == null) {
component = new ArrayList<String>();
}
return this.component;
}
}
然后当您真正想要进行编码时,只需创建 Configuration
类,并用列表模型元素填充它。
Configuration config = new Configuration();
List<String> list = config.getComponent();
Object[] partsList = partsListRight.toArray();
for (Object object : partsList){
list.add((String)object);
}
JAXBContext context = JAXBContext.newInstance(
Configuration.class.getPackage().getName());
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(config, System.out);
更新
Thanks for the reply; I tried using this and now I've got a new error. javax.xml.bind.JAXBException: Provider com.sun.xml.internal.bind.v2.ContextFactory could not be instantiated: javax.xml.bind.JAXBException: "com.cooksys.assessment" doesnt contain ObjectFactory.class or jaxb.index...
抱歉,我习惯于使用 xjc,您已经为您创建了一个 ObjectFactory
。在你的情况下,只需像以前一样创建 JAXBContext
,使用 Configuration.class
,而不是 Configuration.class.getPackage().getName() ;
JAXBContext context = JAXBContext.newInstance(Configuration.class);
测试
import java.util.List;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
public class Marshall {
public static void main(String[] args) throws Exception {
JAXBContext context = JAXBContext.newInstance(Configuration.class);
Marshaller marshaller = context.createMarshaller();
Configuration config = new Configuration();
List<String> list = config.getComponent();
list.add("Hello");
list.add("World");
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(config, System.out);
}
}
结果
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Configuration>
<component>Hello</component>
<component>World</component>
</Configuration>
注意:使用您当前的注释配置会是一样的(同样,xjc 创建上面的注释:-)
@XmlRootElement(name = "Configuration")
public class Configuration {
@XmlElement
protected List<String> component;
public List<String> getComponent() {
if (component == null) {
component = new ArrayList<String>();
}
return this.component;
}
}
关于java - 将 DefaultListModel 编码到 xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25897712/
这是它: btnInsertL.addActionListener(new ActionListener() { @Override public void actio
我在这里做错了什么?我有一个显示我的列表的 GUI,在另一个类中,我想在单击按钮时添加到列表中。单击按钮时,它会询问名称,但永远不会添加。 //class with GUI public class
我正在尝试扩展 DefaultListModel,以便它可以排序和迭代。我在这里找到了一些代码 http://www.javalobby.org/java/forums/t94074.html .我现
有没有办法将数组中的所有字符串添加到 JList 中?我正在使用 DefaultListModel,但我不知道如何使用它。有没有办法只使用 addElement 然后添加数组?我试过了,但它不起作用。
我正在尝试一种不同的方法只是为了练习目的。我知道这看起来很荒谬。我的目标是在构造函数初始化时检索数字数组。但我做不到。我怎样才能做到这一点? public class Myclass extends
我有一个程序需要更新 JList 的内容,它是另一个线程上的 DefaultListModel。由于内容的数量可能会不时发生变化,所以我只是在更新时清除所有内容并将新内容添加到DefaultListM
为什么 myList 是空的? 从输出中我可以看到 myList 没有正确的大小,但消息有。 输出: Apr 23, 2012 4:28:42 PM net.bounceme.dur.nntp.Mes
使用java版本9我有一些测试代码,用于从通过 DefaultListModel 传递引用创建的列表中删除项目。这就是我所做的。 创建 DefaultListModel 对象 通过调用 addElem
我正在 Eclipse 调试器中查看以下表达式 downsPanel.relsListModel.elementAt(4)==oldValue 和 downsPanel.relsListModel.c
我有这个 DefaultListModel DefaultListModel listModel; //constructor does the right hting... etc.. I skip
我正在使用 Swing 开发一个项目,并且有以下事件处理程序: private void txtInputKeyPressed(java.awt.event.KeyEvent evt) {
我正在尝试在 java 中组合两个 defaultListModel,这样我就可以将该模型设置为 JList。该程序基本上是使用 GUI 在购物车中添加和删除商品。当我按下添加按钮时,它不应该从购物车
这个问题已经有答案了: Java - Updating JList after changing an object (3 个回答) 已关闭 9 年前。 我有一个Jlist与 DefaultListM
我正在尝试显示一个项目列表,当用户单击某个项目时,清除该列表并显示另一个列表。 如果我运行它并单击显示列表上的第一个条目,程序就会因一长串运行时异常而终止。如果我删除clear()行(下面注释),它运
我有一个JList由 DefaultListModel 支持并有一个自定义CellRenderer . CellRenderer用于添加对 JCheckBox 的支持在我的JList . 当我尝试修改
我希望我已经很好地解释了我在这里所追求的内容。我在检索已放入 DefaultListModel 中的对象类型时遇到问题。 public class HiddenIntegerFieldListItem
我有一个 list : JList characterList = new JList(characterListModel); characterListModel = new DefaultLis
我正在研究DefaultListModel。我需要将所选项目移动到列表中的第一个或最后一个(不是上下)位置。如何在 DefaultListModel 中的第一个或最后一个位置移动所选项目而不交换? 最
这是我的代码: HashMap inst1 = new HashMap(instructorIO.getInstructors()); instListModel = new DefaultListM
我创建了一个类来存储两个属性 public class MailEntry { private String mail; private MailFormat format; // t
我是一名优秀的程序员,十分优秀!