Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建GUI以编辑多个文档_Java_User Interface_Docx4j - Fatal编程技术网

Java 创建GUI以编辑多个文档

Java 创建GUI以编辑多个文档,java,user-interface,docx4j,Java,User Interface,Docx4j,我正在从事一个涉及编辑多个docx文件的个人项目。目前,我正在创建一个程序,它允许我选择多个文件并一次编辑所有文件,所有文件都将采用相同的格式,因此所需的更改是相同的。无论如何,我在这里找到了一个非常适合我需要的GUI: 我已经编辑过了,以后还会再编辑一些,以适应我的口味。 我目前的代码是: import java.awt.datatransfer.*; import java.awt.event.*; import java.awt.BorderLayout; import java.awt

我正在从事一个涉及编辑多个docx文件的个人项目。目前,我正在创建一个程序,它允许我选择多个文件并一次编辑所有文件,所有文件都将采用相同的格式,因此所需的更改是相同的。无论如何,我在这里找到了一个非常适合我需要的GUI:

我已经编辑过了,以后还会再编辑一些,以适应我的口味。 我目前的代码是:

import java.awt.datatransfer.*;
import java.awt.event.*;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.io.*;
import javax.swing.*;
import javax.swing.UIManager.LookAndFeelInfo;
import javax.swing.border.TitledBorder;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.filechooser.FileSystemView;
import javax.swing.text.*;
import java.util.List;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;

public class ConsolidatorDemo extends JPanel implements ActionListener {
    private static final long serialVersionUID = -4487732343062917781L;
    JFileChooser fc;
    JButton clear;
    JButton ok;
    JTextArea console;

    JList dropZone;
    DefaultListModel listModel;
    JSplitPane childSplitPane, parentSplitPane;
    PrintStream ps;

    public ConsolidatorDemo() {
        super(new BorderLayout());

        fc = new JFileChooser();;
        fc.setMultiSelectionEnabled(true);
        fc.setDragEnabled(true);
        fc.setControlButtonsAreShown(false);
        fc.setFileSelectionMode(JFileChooser.FILES_ONLY);


        JPanel fcPanel = new JPanel(new BorderLayout());
        fcPanel.add(fc, BorderLayout.CENTER);

        clear = new JButton("Clear All");
        clear.addActionListener(this);
        JPanel buttonPanel = new JPanel(new BorderLayout());
        buttonPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
        buttonPanel.add(clear, BorderLayout.LINE_END);

        ok = new JButton("OK");
        ok.addActionListener(this);
        buttonPanel.add(ok, BorderLayout.WEST);

        JPanel leftUpperPanel = new JPanel(new BorderLayout());
        leftUpperPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
        leftUpperPanel.add(fcPanel, BorderLayout.CENTER);
        leftUpperPanel.add(buttonPanel, BorderLayout.PAGE_END);

        JScrollPane leftLowerPanel = new javax.swing.JScrollPane();
        leftLowerPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));

        listModel = new DefaultListModel();
        dropZone = new JList(listModel);
        dropZone.setCellRenderer(new FileCellRenderer());
        dropZone.setTransferHandler(new ListTransferHandler(dropZone));
        dropZone.setDragEnabled(true);
        dropZone.setDropMode(javax.swing.DropMode.INSERT);
        dropZone.setBorder(new TitledBorder("Selected files/folders"));
        leftLowerPanel.setViewportView(new JScrollPane(dropZone));

        childSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT,
                                        leftUpperPanel, leftLowerPanel);
        childSplitPane.setDividerLocation(400);
        childSplitPane.setPreferredSize(new Dimension(480, 650));

        console = new JTextArea();
        console.setColumns(40);
        console.setLineWrap(true);
        console.setBorder(new TitledBorder("Console"));

        parentSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
                                         childSplitPane, console);
        parentSplitPane.setDividerLocation(480);
        parentSplitPane.setPreferredSize(new Dimension(800, 650));

        add(parentSplitPane, BorderLayout.CENTER);
    }

    public void setDefaultButton() {
        getRootPane().setDefaultButton(ok);
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == clear) {
            listModel.clear();
        }
        if(e.getSource() == ok) {
            try {
                createWordDocument();
            } catch(Exception ef) {
                System.out.println("Something is wrong!");
            }
        }
    }

    private static void createWordDocument() throws Exception {
        WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
        wordMLPackage.getMainDocumentPart().addStyledParagraphOfText("Title", "test");
        wordMLPackage.getMainDocumentPart().addParagraphOfText("from docx4j!");

        // Now save it
        wordMLPackage.save(new java.io.File(System.getProperty("user.dir") +
                                                               "/test.docx"));
    }

    /**
     * Create the GUI and show it. For thread safety,
     * this method should be invoked from the
     * event-dispatching thread.
     */
    private static void createAndShowGUI() {
        //Make sure we have nice window decorations.
        JFrame.setDefaultLookAndFeelDecorated(true);
        try {
               //UIManager.setLookAndFeel(
               //    "de.javasoft.plaf.synthetica.SyntheticaBlackStarLookAndFeel");

            for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        //Create and set up the window.
        JFrame frame = new JFrame("Consolidator!");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        //Create and set up the menu bar and content pane.
        ConsolidatorDemo demo = new ConsolidatorDemo();
        demo.setOpaque(true); //content panes must be opaque
        frame.setContentPane(demo);

        //Display the window.
        frame.pack();
        frame.setVisible(true);
        demo.setDefaultButton();
    }

    public static void main(String[] args) {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}

class FileCellRenderer extends DefaultListCellRenderer {

    public Component getListCellRendererComponent(JList list,
            Object value,
            int index,
            boolean isSelected,
            boolean cellHasFocus) {

        Component c = super.getListCellRendererComponent(
            list,value,index,isSelected,cellHasFocus);

        if (c instanceof JLabel && value instanceof File) {
            JLabel l = (JLabel)c;
            File f = (File)value;
            l.setIcon(FileSystemView.getFileSystemView().getSystemIcon(f));
            l.setText(f.getName());
            l.setToolTipText(f.getAbsolutePath());
        }

        return c;
    }
}

class ListTransferHandler extends TransferHandler {

    private JList list;

    ListTransferHandler(JList list) {
        this.list = list;
    }

    @Override
    public boolean canImport(TransferHandler.TransferSupport info) {
        // we only import FileList
        if (!info.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
            return false;
        }
        return true;
    }

    @Override
    public boolean importData(TransferHandler.TransferSupport info) {
        if (!info.isDrop()) {
            return false;
        }

        // Check for FileList flavor
        if (!info.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
            displayDropLocation("List doesn't accept a drop of this type.");
            return false;
        }

        // Get the fileList that is being dropped.
        Transferable t = info.getTransferable();
        List<File> data;
        try {
            data = (List<File>)t.getTransferData(DataFlavor.javaFileListFlavor);
        } catch (Exception e) { return false; }
        DefaultListModel model = (DefaultListModel) list.getModel();
        for (Object file : data) {
            model.addElement((File)file);
        }
        return true;
    }

    private void displayDropLocation(String string) {
        System.out.println(string);
    }
}
代码当前生成以下内容:

我没有名声发布图片:p

我的目标是这样,当用户单击“确定”时,底部区域中选择的所有文件都将被编辑。单击“确定”将使用docx4j创建word文档,因此,如果您希望将其放到IDE中,那么最好注释掉测试方法以及与之相关的ActionListener的一部分

总之,我的问题归结为

如何获取在底部区域中选择的多个文件,并让“确定”按钮对其执行操作

我想写一个方法,当我按下OK按钮时,每个文件都会被调用,但我不确定一旦文件被移动到该区域后如何使用它们

谢谢你的时间


顺便说一句,我还试图拆除右侧的控制台,但我不知道如何在不打破整个窗口的情况下将其拆除,因此,如果能在那里提供一些提示,我将不胜感激,尽管我相信我会在几个小时的睡眠后得到它。谢谢

从签出开始,然后看看,或者如果您正在使用Java7+谢谢!我目前的想法是通过listModel.size使用for循环,并具有类似path.addlistModel.getElement.toPath的内容;使用路径的数组列表。从那里我可以做我想做的事情,但是现在我得到了一个错误,类型为DefaultListModel的getElement是未定义的类型