2011-04-07 60 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; 
    } 
} 


請下一次清潔代碼更多:)我真的不知道什麼讓我通過它。也許因爲有一天,很久以前我有類似的問題,並且很容易再次處理它? :)

祝你好運,博羅。

相關問題