2011-04-07 52 views
0

我需要关于Javan swing的htis问题的帮助。我的GUI中有三个JList。其中一个列表包含一家餐厅的菜单。收银员应该点击第一个JList上的一道菜,而他点击的任何东西都会出现在第二个JList上。我怎样才能做到这一点?我想从一个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

如果您还在代码中包含主要方法,以便代码可以运行并准确呈现所需的问题,那么只需对未来进行说明即可。 我假设你正在以这种方式发起它(如果是的话,我会建议你把它编辑成你的问题代码)。 'public static void main(String [] args) \t { \t \t JFrame f = new frame(); \t \t f.setSize(800,600); \t \t f.setVisible(true); \t}' – Boro 2011-04-07 23:21:50

回答

0
  1. JList : JList l = new JList();

  2. 添加列表选择侦听

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

0

我注释掉了大量的代码。 我必须说,请不要误解我的意思我不想冒犯你的任何技能或任何东西,但是你的这段代码是一个丑陋的儿子...我在很长一段时间内看到的代码:)

@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; 
    } 
} 


请下一次清洁代码更多:)我真的不知道什么让我通过它。也许因为有一天,很久以前我有类似的问题,并且很容易再次处理它? :)

祝你好运,博罗。