使用"全部移动"修改双重列表按键

时间:2015-11-30 18:52:32

标签: java

我正在开发一个GUI(这个社区到目前为止一直非常有帮助),我已经达到了我需要实现的另一个重要步骤。

目前我的GUI由JOptionsPane组成。在此窗格中是一个包含两个列表和四个按钮的面板。其中两个按钮是箭头,其中的文字是">"和"<"。 (按钮位于两个列表之间。)

这些按钮正常工作。用户可以从第一个列表中选择一个对象,然后单击>它将移至第二个列表,反之亦然。

接下来我需要添加一个功能,其中有一个">>"按钮。这会将第一个列表中的所有项目移动到第二个列表。我真的不知道如何处理这部分。我假设它是某种类型的while循环,虽然我并不完全确定。

首先允许我发布显示>的简单snipplet按钮。

buttonin = new JButton("        >         ");
        buttonin.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e){
                int[] fromindex = outputDetails.getSelectedIndices();
                Object[] from = outputDetails.getSelectedValues();

                for(int i=0; i< from.length; i++){
                    output.addElement(from[i]);
                    System.out.println(output);
                }

                for(int i = (fromindex.length-1); i>=0; i--){
                    input.remove(fromindex[i]);
                }
            }
        });

接下来,我将发布完整的代码,以便了解我想要实现的目标。我希望这是足够的信息,有人可以帮助我,如果不是我道歉,实际的程序很长,我想不出一个简单的方法来隔离这个测试用例。

public static void displayGUI(){

        int result = JOptionPane.showOptionDialog(null, getPanel(),"JOptionPane Example : ", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null, new String[]{"Confirm","Create Return"}, "default");

        if(result == 1){
            initialScreenDecisions="NONE";
            MainWriter.finishedCounter=true;
            System.out.println(MainWriter.finishedCounter);
            while(MainWriter.entryDetails.size()>0){
                MainWriter.entryDetails.remove(0);
            }
            while(output.size()>0){
                output.remove(0);
            }
        }
    }


    private static JPanel getPanel(){

        JPanel panel = new JPanel();
        JPanel panelTop = new JPanel();
        JPanel topButtons = new JPanel();
        JPanel bottomButtons = new JPanel();


        String text = "<html>"
                +"Batch <font size=6 color=>"+MainWriter.batchHeaderCounter+"</font> of <font size=6>"+BatchCounter.BatchTotal+"</font>"
                +"<br>Batch Header:  <font size=5><font color=red>"+MainWriter.BatchHeader+"</font>"
                +"</html>";
        JLabel topLabel = new JLabel(text);



        panelTop.add(topLabel);

        input = new DefaultListModel();
        output = new DefaultListModel();

        String[] shoppingItems = new String[MainWriter.entryDetails.size()];
        shoppingItems = MainWriter.entryDetails.toArray(shoppingItems);

        for(int i = 0; i < shoppingItems.length; i++){
            input.addElement(shoppingItems[i]);
        }

        outputDetails = new JList(input);
        outputDetails.setVisibleRowCount(10);
        outputDetails.setFixedCellHeight(20);
        outputDetails.setFixedCellWidth(400);
        outputDetails.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);

        JScrollPane list1 = new JScrollPane(outputDetails);

        inputDetails = new JList(output);
        inputDetails.setVisibleRowCount(10);
        inputDetails.setFixedCellHeight(20);
        inputDetails.setFixedCellWidth(400);
        inputDetails.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);

        JScrollPane list2 = new JScrollPane(inputDetails);

        JPanel buttonPanel = new JPanel();

        buttonin = new JButton("        >         ");
        buttonin.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e){
                int[] fromindex = outputDetails.getSelectedIndices();
                Object[] from = outputDetails.getSelectedValues();

                for(int i=0; i< from.length; i++){
                    output.addElement(from[i]);
                    System.out.println(output);
                }

                for(int i = (fromindex.length-1); i>=0; i--){
                    input.remove(fromindex[i]);
                }
            }
        });
        buttonPanel.add(buttonin);

        buttonout = new JButton("        <         ");
        buttonout.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e){
                Object[] to = inputDetails.getSelectedValues();
                int[] toindex = inputDetails.getSelectedIndices();

                for(int i = 0; i < to.length; i++){
                    input.addElement(to[i]);
                }

                for(int i = (toindex.length-1); i >=0; i--){
                    output.remove(toindex[i]);
                }
            }
        });


        buttonall = new JButton("        >>        ");
        buttonall.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e){

                if(initialScreenDecisions.equals("DEFAULT")){
                    JOptionPane.showMessageDialog(null, "You have selected to add all entry details. Please " +
                                                      "\nclick okay on the next scren to confirm or click " +
                                                      "\n'>>' again to cancel the apply all option.");
                    initialScreenDecisions="ADDALL";
                }else if(initialScreenDecisions.equals("ADDALL")){
                        JOptionPane.showMessageDialog(null, "You have canceled the apply all option.");
                    initialScreenDecisions="DEFAULT";
                }else{
                    JOptionPane.showMessageDialog(null, "You must disable the '<<' option before you can use this.");
                }

            }
        });

        buttonnone = new JButton("        <<        ");
        buttonnone.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e){
                if(initialScreenDecisions.equals("DEFAULT")){

                    JOptionPane.showMessageDialog(null, "You have selected to skip the current batch and" +
                                                    "\nomit all of it's entries. Click okay on the next" +
                                                    "\nscreen to confirm or click '<<' again to" +
                                                    "\ncancel the option.");
                initialScreenDecisions="NONE";

                }else if(initialScreenDecisions.equals("NONE")){

                    JOptionPane.showMessageDialog(null, "You have canceled the omit all option.");
                    initialScreenDecisions="DEFAULT";

                }else{
                    JOptionPane.showMessageDialog(null, "You must disable the '>>' option before you can use this.");
                }



            }
        });

        buttonhelp = new JButton("HELP");
        buttonhelp.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e){
                JOptionPane.showMessageDialog(null, "This screen allows you to determine the entry details from" +
                                                    "\nthe current batch that will be included in the final return." +
                                                    "\nSelect the details you wish to include and click the > arrow to" +
                                                    "\nmove them to the right side. Pressing the >> button will" +
                                                    "\ninclude all entry details for the current batch in the final" +
                                                    "\nreturn. Clicking the < button will move a detail back."+
                                                    "\nClick << to omit the entire batch. Use confirm to continue"+
                                                    "\nto the next step or 'create return' to finish the Nacha return"+
                                                    "\nwith all past additions.");                          
            }
        });         

        buttonPanel.setLayout(new BorderLayout());
        topButtons.add(buttonin);
        topButtons.add(buttonall);
        topButtons.add(buttonnone);
        topButtons.add(buttonout);
        bottomButtons.add(buttonhelp);
        buttonPanel.add(topButtons,BorderLayout.NORTH);
        buttonPanel.add(buttonhelp,BorderLayout.SOUTH);

        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);
        bottomPanel.add(Box.createRigidArea(new Dimension(5,0)));
        bottomPanel.add(list2);
        bottomPanel.add(Box.createRigidArea(new Dimension(10,0)));

        panel.setLayout(new BorderLayout());
        panel.add(panelTop,BorderLayout.NORTH);
        panel.add(bottomPanel,BorderLayout.CENTER);
        panel.setOpaque(true);



        return panel;
    }

您可以忽略上述&gt;&gt;按钮内容。现在,它将允许用户选择列表中的所有项目,它不会直观地显示选择。如果我得到&gt;&gt;按钮一次移动所有项目然后我不需要你已经实现的额外步骤。

1 个答案:

答案 0 :(得分:1)

我不太确定您的所有变量类型是什么,但我认为这应该适用于>>的ActionListener。

for (int i = 0; i < input.getSize(); i++) {
    output.addElement(input.get(i));
}
input.clear();