简体   繁体   English

我想将动作侦听器从一个JList添加到另一个JList,并且JList如何在没有任何文本的情况下出现?

[英]I want to add an action listener from one JList to another JList and how can a JList appear with out any text inside?

I need help with htis issue I have with Javan swing. 我需要有关Javan swing的htis问题的帮助。 I have three JLists in my GUI. 我的GUI中有三个JList。 One of the list contains a menu for a restaurant. 列表之一包含餐厅的菜单。 The cashier is supposed to click on the a dish on the first JList and whatever he clicked should appear on the second JList. 收银员应该在第一个JList上单击一个盘子,而他单击的任何内容都应出现在第二个JList上。 How can i do this? 我怎样才能做到这一点?

Also another problem is that I cant hae the JList appear UNLESS i am giving it an array object to display the menu, I want the JList to appear while its empty as well, how can i do that? 另一个问题是我无法让JList出现,除非我给它一个数组对象以显示菜单,我希望JList在其为空的同时也出现,我该怎么做?



    import java.awt.*; 
    import java.awt.event.*;


    import javax.swing.*;


    public class frame extends JFrame {
    private JList menuList ; 
    private JList orderList; 
    private JLabel countLabel; 
    private DefaultListModel listModel; 
    private Dimension menuListDimension; 



    public frame (){
    JFrame frame = new JFrame ();
    frame.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    buildUI(); 
    }
    private void buildUI () {
        BoxLayout mainLayout = new BoxLayout(getContentPane(), BoxLayout.X_AXIS);
        getContentPane().setLayout(mainLayout);

    getContentPane().add(Box.createHorizontalGlue());
    getContentPane().add(buildMenuPanel()); 
    getContentPane().add(Box.createHorizontalStrut(0));
    getContentPane().add(buildOrderPanel());  
    getContentPane().add(Box.createHorizontalStrut(10));
    getContentPane().add(buildPayPanel());
    getContentPane().add(Box.createHorizontalStrut(50));
    //getContentPane().add(recieptPanel());
    getContentPane().add(Box.createHorizontalGlue());
}


    private JPanel buildMenuPanel (){

    JPanel menuPanel = new JPanel();
    BoxLayout menuLayout = new BoxLayout(menuPanel, BoxLayout.Y_AXIS);
    menuPanel.setLayout(menuLayout);
    getContentPane().add(menuPanel);

    //menuList.addActionListener(
    //new ActionListener()
    {
    //public void actionPerformed(ActionEvent e)
    //{
    //helloPressed();
    //}
    //}
        listModel = new DefaultListModel();
        listModel.addElement("ghjghj");
        listModel.addElement("John Smith");
        listModel.addElement("Kathy Green");
        listModel.addElement("ghjghj");
        listModel.addElement("John Smith");
        listModel.addElement("Kathy Green");
        listModel.addElement("ghjghj");
        listModel.addElement("John Smith");
        listModel.addElement("Kathy Green");
        listModel.addElement("ghjghj");
        listModel.addElement("John Smith");
        listModel.addElement("Kathy Green");

        menuList = new JList(listModel); //data has type Object[]
        menuList.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
        menuList.setLayoutOrientation(JList.VERTICAL);
        menuList.setVisibleRowCount(-1);
        menuList.setFixedCellWidth(200);


        JScrollPane listScroller = new JScrollPane(menuList);
        listScroller.setPreferredSize(new Dimension(7, 250));

    menuPanel.add(menuList);

    menuPanel.add(Box.createVerticalStrut(5));
    return menuPanel;
    }

    }


     private JPanel buildOrderPanel (){

    JPanel orderPanel = new JPanel();
    BoxLayout orderLayout = new BoxLayout(orderPanel, BoxLayout.Y_AXIS);
    orderPanel.setLayout(orderLayout);
    getContentPane().add(orderPanel);

    //menuList.addActionListener(
    //new ActionListener()
    //{
    //public void actionPerformed(ActionEvent e)
    //{
    //helloPressed();
    //}
    orderList = new JList(listModel); //data has type Object[]
    orderList.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
    orderList.setLayoutOrientation(JList.HORIZONTAL_WRAP);
    orderList.setVisibleRowCount(-1);
    orderList.setFixedCellWidth(200);

    JScrollPane listScroller = new JScrollPane(orderList);
    listScroller.setPreferredSize(new Dimension(250, 80));

    //orderList.setVisible(true); 
    orderPanel.add(orderList);
    //orderPanel.setVisible(true);


    orderPanel.add(Box.createVerticalStrut(5));
    return orderPanel;

    }
     private JPanel buildPayPanel (){

    JPanel payPanel = new JPanel();
    BoxLayout doneLayout = new BoxLayout(payPanel, BoxLayout.Y_AXIS);
    payPanel.setLayout(doneLayout);
    getContentPane().add(payPanel);


    payPanel.add(Box.createVerticalStrut(5));
    listModel = new DefaultListModel();
        listModel.addElement("ghjghj");
        listModel.addElement("John Smith");
        listModel.addElement("Kathy Green");
        listModel.addElement("ghjghj");
        listModel.addElement("John Smith");
        listModel.addElement("Kathy Green");
        listModel.addElement("ghjghj");
        listModel.addElement("John Smith");
        listModel.addElement("Kathy Green");
        listModel.addElement("ghjghj");
        listModel.addElement("John Smith");
        listModel.addElement("Kathy Green");

        menuListDimension = new Dimension (10,10);

        menuList = new JList(listModel); //data has type Object[]
        menuList.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
        menuList.setLayoutOrientation(JList.VERTICAL);
        menuList.setVisibleRowCount(50);
        menuList.setFixedCellWidth(300);
        menuList.setDragEnabled(true);
        menuList.setMinimumSize(menuListDimension); 



        JScrollPane listScroller = new JScrollPane(menuList);
        listScroller.setPreferredSize(new Dimension(80, 250));

        payPanel.add(menuList);

        payPanel.add(Box.createVerticalStrut(5));
        getContentPane().add(payPanel);
        JButton payButton = new JButton ("Pay");
        JButton cancelButton = new JButton ("Cancel");

        //menuList.addActionListener(
        //new ActionListener()
        //{
        //public void actionPerformed(ActionEvent e)
        //{
        //helloPressed();
        //}

        payPanel.add(payButton); 
        payPanel.add(cancelButton); 
    return payPanel;


     }


    }

  1. Empty JList : JList l = new JList() ; 空的JList : JList l = new JList() ;

  2. Add a list selection Listener 添加列表选择监听器

    firstJList.addSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent e) { //add items to your other JList } });

I have commented out lots of the code. 我已经注释掉了很多代码。 I have to say it, please do not get me wrong I do not want to offend any of your skills or anything but this code of yours is one ugly son of ... a code I have seen in a very long time :) 我必须说这句话,请不要误会我的意思,我不想冒犯您的任何技能或任何东西,但是您的这段代码是...的一个丑陋儿子……我在很长一段时间里都看到过这样的代码:)

@Swaranga Sarma suggestions are useful. @Swaranga Sarma的建议很有用。 And as stated by this user the JList would show even if empty. 并且如该用户所述,即使为空,JList也会显示。 You almost had it right, you just added the list wrongly. 您几乎是正确的,只是错误地添加了列表。 You were on the right track thought, you have used JScrollPane's but then you should add these to the panel and not the list. 您以为是对的,您曾经使用过JScrollPane,但是您应该将它们添加到面板中而不是列表中。

I have decided to use a mouse listener here instead of the suggested by @Swaranga Sarma selection listener because doing so you will have no problem when clicking twice on the same item and adding it only once as it would be if you used the selection listener as it works only on item change. 我决定在这里使用鼠标侦听器,而不是@Swaranga Sarma选择侦听器的建议,因为这样做可以使您在同一项目上单击两次并仅添加一次时没有问题,就像使用选择侦听器那样它仅适用于项目更改。



package test.components;

import java.awt.*;
import java.awt.event.*;


import javax.swing.*;

public class frame extends JFrame
{
    private JList menuList;
    private JList menuList2;
    private JList orderList;
    private JLabel countLabel;
//  private DefaultListModel listModel;
    private Dimension menuListDimension;

    public static void main(String[] args)
    {
        JFrame f = new frame();
        f.setSize(800, 600);
        f.setVisible(true);
    }

    public frame()
    {
        //JFrame frame = new JFrame();
        //frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        buildUI();
    }

    private void buildUI()
    {
        //BoxLayout mainLayout = new BoxLayout(getContentPane(), BoxLayout.X_AXIS);
        GridLayout mainLayout = new GridLayout(1, 5);
        getContentPane().setLayout(mainLayout);

//      getContentPane().add(Box.createHorizontalGlue());
        getContentPane().add(buildMenuPanel());
//      getContentPane().add(Box.createHorizontalStrut(0));
        getContentPane().add(buildOrderPanel());
//      getContentPane().add(Box.createHorizontalStrut(10));
        getContentPane().add(buildPayPanel());
//      getContentPane().add(Box.createHorizontalStrut(50));
//      getContentPane().add(recieptPanel());
//      getContentPane().add(Box.createHorizontalGlue());
    }

    private JPanel buildMenuPanel()
    {
        JPanel menuPanel = new JPanel();
        BoxLayout menuLayout = new BoxLayout(menuPanel, BoxLayout.Y_AXIS);
        menuPanel.setLayout(menuLayout);
        getContentPane().add(menuPanel);

        final DefaultListModel listModel = new DefaultListModel();
        listModel.addElement("ghjghj");
        listModel.addElement("John Smith");
        listModel.addElement("Kathy Green");
        listModel.addElement("ghjghj");
        listModel.addElement("John Smith");
        listModel.addElement("Kathy Green");
        listModel.addElement("ghjghj");
        listModel.addElement("John Smith");
        listModel.addElement("Kathy Green");
        listModel.addElement("ghjghj");
        listModel.addElement("John Smith");
        listModel.addElement("Kathy Green");

        menuList = new JList(listModel); //data has type Object[]
        menuList.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
        menuList.setLayoutOrientation(JList.VERTICAL);
        menuList.setVisibleRowCount(50);
        menuList.setFixedCellWidth(150);
        menuList.setBackground(Color.GREEN);

        menuList.addMouseListener(new MouseAdapter()
        {
            @Override
            public void mousePressed(MouseEvent e)
            {
                Object selected = menuList.getSelectedValue();
                System.out.println("menuList.addMouseListener.mousePressed selected=" + selected);
                DefaultListModel dm = (DefaultListModel) orderList.getModel();
                dm.add(orderList.getModel().getSize(), selected);
            }
        });


        JScrollPane listScroller = new JScrollPane(menuList);
        listScroller.setPreferredSize(new Dimension(100, 250));

        menuPanel.add(listScroller);

//          menuPanel.add(Box.createVerticalStrut(5));
        return menuPanel;
    }

    private JPanel buildOrderPanel()
    {
        JPanel orderPanel = new JPanel();
        BoxLayout orderLayout = new BoxLayout(orderPanel, BoxLayout.Y_AXIS);
        orderPanel.setLayout(orderLayout);
        orderList = new JList(new DefaultListModel());//(listModel); //data has type Object[]
        orderList.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
        orderList.setLayoutOrientation(JList.HORIZONTAL_WRAP);
        orderList.setVisibleRowCount(50);
        orderList.setFixedCellWidth(150);
        orderList.setBackground(Color.RED);

        JScrollPane listScroller = new JScrollPane(orderList);
        listScroller.setPreferredSize(new Dimension(100, 250));

        //orderList.setVisible(true); 
        orderPanel.add(listScroller);
        //orderPanel.setVisible(true);

//      getContentPane().add(orderPanel);
//      orderPanel.add(Box.createVerticalStrut(5));
        return orderPanel;
    }

    private JPanel buildPayPanel()
    {

        JPanel payPanel = new JPanel();
        BoxLayout doneLayout = new BoxLayout(payPanel, BoxLayout.Y_AXIS);
        payPanel.setLayout(doneLayout);
//      getContentPane().add(payPanel);

//      payPanel.add(Box.createVerticalStrut(5));
        DefaultListModel listModel = new DefaultListModel();
        listModel.addElement("ghjghj");
        listModel.addElement("John Smith");
        listModel.addElement("Kathy Green");
        listModel.addElement("ghjghj");
        listModel.addElement("John Smith");
        listModel.addElement("Kathy Green");
        listModel.addElement("ghjghj");
        listModel.addElement("John Smith");
        listModel.addElement("Kathy Green");
        listModel.addElement("ghjghj");
        listModel.addElement("John Smith");
        listModel.addElement("Kathy Green");

        menuListDimension = new Dimension(10, 10);

        menuList2 = new JList(listModel); //data has type Object[]
        menuList2.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
        menuList2.setLayoutOrientation(JList.VERTICAL);
        menuList2.setVisibleRowCount(50);
        menuList2.setFixedCellWidth(150);
        menuList2.setDragEnabled(true);
        menuList2.setBackground(Color.BLUE);
//      menuList2.setMinimumSize(menuListDimension);
        JScrollPane listScroller = new JScrollPane(menuList2);
        listScroller.setPreferredSize(new Dimension(100, 250));

        payPanel.add(listScroller);

//      payPanel.add(Box.createVerticalStrut(5));
//      getContentPane().add(payPanel);
        JButton payButton = new JButton("Pay");
        JButton cancelButton = new JButton("Cancel");

        payPanel.add(payButton);
        payPanel.add(cancelButton);
        return payPanel;
    }
}


Please next time clean the code more :) I really wonder what got me through it. 请下次再清理代码:)我真的很想知道是什么促使我完成了。 Maybe because I had a similar problem one day, a long time ago, and it was easy to deal with it again? 也许是因为很久以前的一天,我遇到了类似的问题,并且很容易再次解决它? :) :)

Good luck, Boro. 祝你好运,博罗。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM