java非闭合xml转对象_使用jaxb将Java对象转换为xml,反之亦然(将其转换为元组和非元组)...

我想有一个名为save()的方法,该方法应将右侧面板中的计算机部件列表整理为XML文件.相反,另一种称为load()的方法应将已保存的XML文件解组到对象中.

因此,基本上,“保存”事件将调用save()方法并将右侧面板中的零件列表保存到XML文件. “ Load”事件应清除右侧面板,并调用load()方法.

调用load()时,应在右侧面板中显示未整理的数据.我有“出口”上班.

不过,我很难弄清楚“加载”和“保存”部分.

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

public class PCParts implements ActionListener{

JList destinationList, sourceList;

JButton buttonin, buttonout;

DefaultListModel source, destination;

public JPanel createContentPane (){

JPanel totalGUI = new JPanel();

source = new DefaultListModel();

destination = new DefaultListModel();

String shoppingItems[] = {"Case", "Motherboard", "CPU", "RAM", "GPU",

"HDD", "PSU"};

for(int i = 0; i < shoppingItems.length; i++)

{

source.addElement(shoppingItems[i]);

}

destinationList = new JList(source);

destinationList.setVisibleRowCount(10);

destinationList.setFixedCellHeight(20);

destinationList.setFixedCellWidth(140);

destinationList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);

JScrollPane list1 = new JScrollPane(destinationList);

sourceList = new JList(destination);

sourceList.setVisibleRowCount(10);

sourceList.setFixedCellHeight(20);

sourceList.setFixedCellWidth(140);

sourceList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);

JScrollPane list2 = new JScrollPane(sourceList);

JPanel buttonPanel = new JPanel();

buttonin = new JButton(">>");

buttonin.setHorizontalAlignment(SwingConstants.RIGHT);

buttonin.addActionListener(this);

buttonPanel.add(buttonin);

JPanel bottomPanel = new JPanel();

bottomPanel.setLayout(new BoxLayout(bottomPanel, BoxLayout.LINE_AXIS));

bottomPanel.add(Box.createRigidArea(new Dimension(10,0)));

bottomPanel.add(list1);

bottomPanel.add(Box.createRigidArea(new Dimension(5,0)));

bottomPanel.add(buttonPanel);

buttonout = new JButton("<

buttonout.addActionListener(this);

buttonPanel.add(buttonout);

bottomPanel.add(Box.createRigidArea(new Dimension(5,0)));

bottomPanel.add(list2);

bottomPanel.add(Box.createRigidArea(new Dimension(10,0)));

totalGUI.add(bottomPanel);

totalGUI.setOpaque(true);

return totalGUI;

}

private JPanel createSquareJPanel(Color color, int size) {

JPanel tempPanel = new JPanel();

tempPanel.setBackground(color);

tempPanel.setMinimumSize(new Dimension(size, size));

tempPanel.setMaximumSize(new Dimension(size, size));

tempPanel.setPreferredSize(new Dimension(size, size));

return tempPanel;

}

public void actionPerformed(ActionEvent e)

{

int i = 0;

if(e.getSource() == buttonin)

{

int[] fromindex = destinationList.getSelectedIndices();

Object[] from = destinationList.getSelectedValues();

for(i = 0; i < from.length; i++)

{

destination.addElement(from[i]);

}

for(i = (fromindex.length-1); i >=0; i--)

{

source.remove(fromindex[i]);

}

}

else if(e.getSource() == buttonout)

{

Object[] to = sourceList.getSelectedValues();

int[] toindex = sourceList.getSelectedIndices();

for(i = 0; i < to.length; i++)

{

source.addElement(to[i]);

}

for(i = (toindex.length-1); i >=0; i--)

{

destination.remove(toindex[i]);

}

}

}

private static void createAndShowGUI() {

JFrame.setDefaultLookAndFeelDecorated(true);

JFrame frame = new JFrame("PC Parts Builder");

JMenu file = new JMenu ("File");

file.setMnemonic (KeyEvent.VK_F);

PCParts demo = new PCParts();

frame.setContentPane(demo.createContentPane());

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.pack();

frame.setVisible(true);

JMenuBar menuBar = new JMenuBar();

frame.setJMenuBar(menuBar);

JMenu mnFile = new JMenu("File");

menuBar.add(mnFile);

JMenuItem item;

file.add(item = new JMenuItem("Load"));

item.setMnemonic (KeyEvent.VK_O);

item.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

doOpenCommand();

}

private void doOpenCommand() {

// TODO Auto-generated method stub

}

});

mnFile.add(item);

JMenuItem mntmSave = new JMenuItem("Save");

mntmSave.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

doSaveCommand();

}

private void doSaveCommand() {

}

});

mnFile.add(mntmSave);

JMenuItem mntmNewMenuItem = new JMenuItem("Exit");

mntmNewMenuItem.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

System.exit(0);

}

});

mnFile.add(mntmNewMenuItem);

}

public static void main(String[] args) {

SwingUtilities.invokeLater(new Runnable() {

public void run() {

createAndShowGUI();

}

});

}

}

解决方法:

只需创建一个部件类来保存List< String>.然后,您可以编组/解组该类的实例.

@XmlRootElement

@XmlAccessorType(XmlAccessType.FIELD)

public class Parts {

@XmlElement(name = "part")

private List part;

public List getPart() { return part; }

public void setPart(List part) { this.part = part; }

}

至于编组(保存),您可以通过使用Parts类创建JAXBContext来创建编组.警官上的正义呼唤.

private void doSaveCommand() throws Exception {

ArrayList save = new ArrayList<>();

for (int i = 0; i < destination.size(); i++) {

save.add((String)destination.getElementAt(i));

}

Parts parts = new Parts();

parts.setPart(save);

JAXBContext context = JAXBContext.newInstance(Parts.class);

Marshaller marshaller = context.createMarshaller();

marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

marshaller.marshal(parts, System.out);

}

请注意,您有一些设计问题.不需要访问的DefaultListModels可能是因为侦听器代码在静态上下文中,并且模型不是静态的.我只是使模型静态化,以使其正常工作,但您需要稍微重新设计代码.这是结果(对于标准输出,您将打包存档).

Case

Motherboard

CPU

我会让您自己进行编组工作.这应该使您入门.

一些资源

标签:java,xml,jaxb,swing,marshalling

来源: https://codeday.me/bug/20191012/1899808.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值