繁体   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?

我需要有关Javan swing的htis问题的帮助。 我的GUI中有三个JList。 列表之一包含餐厅的菜单。 收银员应该在第一个JList上单击一个盘子,而他单击的任何内容都应出现在第二个JList上。 我怎样才能做到这一点?

另一个问题是我无法让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. 空的JList : JList l = new JList() ;

  2. 添加列表选择监听器

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

我已经注释掉了很多代码。 我必须说这句话,请不要误会我的意思,我不想冒犯您的任何技能或任何东西,但是您的这段代码是...的一个丑陋儿子……我在很长一段时间里都看到过这样的代码:)

@Swaranga Sarma的建议很有用。 并且如该用户所述,即使为空,JList也会显示。 您几乎是正确的,只是错误地添加了列表。 您以为是对的,您曾经使用过JScrollPane,但是您应该将它们添加到面板中而不是列表中。

我决定在这里使用鼠标侦听器,而不是@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;
    }
}


请下次再清理代码:)我真的很想知道是什么促使我完成了。 也许是因为很久以前的一天,我遇到了类似的问题,并且很容易再次解决它? :)

祝你好运,博罗。

暂无
暂无

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

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