如何使用添加删除按钮在两个jlists之间移动项目

时间:2015-04-19 05:38:33

标签: java jbutton jlist

我的任务是创建一个具有两个JLists(左和右)的GUI,并且能够使用添加和删除按钮在两个列表之间移动项目。

一旦添加到右侧列表中,该项目就不再显示在左侧列表中。如何让这些按钮执行正确的操作?

请参阅下面的代码:

            JList<String> leftList = new JList<String>();
            leftList.setModel(new AbstractListModel<String>() {
                String[] values = new String[] {"Car", "Truck", "Boat", "Plane"};
                public int getSize() {
                    return values.length;
                }
                public String getElementAt(int index) {
                    return values[index];
                }
            });
            leftList.setBounds(0, 0, 196, 539);
            frame.getContentPane().add(leftList);

            JList<String>rightList = new JList<String>();
            rightList.setBounds(285, 0, 196, 539);
            frame.getContentPane().add(rightList);


    //this will create the add and remove buttons
            JButton btnAddButton = new JButton(">>");
            btnAddButton.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent event) {

                }
            });
            btnAddButton.setBounds(218, 247, 49, 34);
            frame.getContentPane().add(btnAddButton);





            JButton btnRemoveButton = new JButton("<<");
            btnRemoveButton.setBounds(218, 292, 49, 34);
            frame.getContentPane().add(btnRemoveButton);


}

1 个答案:

答案 0 :(得分:0)

结帐列表演示

https://docs.oracle.com/javase/tutorial/uiswing/components/list.html

https://docs.oracle.com/javase/tutorial/displayCode.html?code=https://docs.oracle.com/javase/tutorial/uiswing/examples/components/ListDemoProject/src/components/ListDemo.java

准则:

你不应该使用局部变量,因为一旦方法结束,它们都会消失,只有这样才能让它们回来

((JComponent)frame.getContentPane().getComponent(n)).getComponent(n) 

我指的是你的&#34; GUI&#34;和

String[] values;

你不应该使用&#34; String []值&#34;因为数组具有固定的大小,因此你无法修改它,使用ArrayList。

在这种特殊情况下你根本不应该使用数组或列表,继续阅读......

开发GUI时你不应该精确,因为图形优化机制会在最后崩溃它,因此而不是使用&#34; AbstractListModel&#34;你应该试过&#34; DefaultListModel&#34;

(老实说,我试图用&#34; AbstractListModel&#34;并且在&#34; leftListModel&#34;中,getElementAt()方法只调用一次,并且每次进一步重新验证()和重绘( )不给出任何结果)

由于现在我们使用DefaultListModel不需要任何数组,而是有#34; addElement()&#34;