2012-09-02 78 views
0

基本上,我的項目是創建一個簡單的庫系統,其中任何給定的用戶一次最多可以有三本書。我使用BreezySwing(因爲我需要)並使用JList列出當前取出的書籍。使用新輸入更新JList

要返回圖書,用戶點擊圖書返回列表中,然後單擊「返回」按鈕。但是,我無法弄清楚如何讓JList正常工作。

如何將新信息添加到列表中?

這裏是我到目前爲止的代碼:

import java.util.*; 
import javax.swing.*; 
import BreezySwing.*; 

public class ClientGUI extends GBFrame { 
    private JButton returnBook, takeOutBook; 
    private JLabel title, author; 
    private JTextField titleInput, authorInput; 
    private int bookCount = 0; 
    DefaultListModel books = new DefaultListModel(); 
    private JList booksOut = new JList(books); 

    public ClientGUI(){ 
     title = addLabel("Title: ",1,1,1,1); 
     author = addLabel("Author: ",2,1,1,1); 
     titleInput = addTextField("",1,2,2,1); 
     authorInput = addTextField("",2,2,2,1); 
     returnBook = addButton("Return",3,1,1,1); 
     takeOutBook = addButton("Take Out",3,2,1,1); 
     booksOut = addList(4,1,2,1); 
     returnBook.setEnabled(false); 
     books.addElement("Book - Author"); 
    } 

    public void buttonClicked(JButton buttonObj){ 
     if(buttonObj == takeOutBook){ 
      if(bookCount < 3){ 
       String titleAdd = titleInput.getText(); 
       String authorAdd = authorInput.getText(); 
       books.addElement(titleAdd + "By: " + authorAdd); 
       bookCount++; 

       if(bookCount == 0){ 
        takeOutBook.setEnabled(true); 
        returnBook.setEnabled(false); 
       } else if(bookCount == 3){ 
        takeOutBook.setEnabled(false); 
        returnBook.setEnabled(true); 
       } else { 
        takeOutBook.setEnabled(true); 
        returnBook.setEnabled(true); 
       } 
      } else if(bookCount == 3){ 
       JOptionPane.showMessageDialog(null, "Please return a book first", "Invalid Choice", JOptionPane.INFORMATION_MESSAGE); 
      } 
     } else if(buttonObj == returnBook){ 
      //int n = (Integer) books.getSelectedValue(); 
      //books.remove(n); 
      bookCount--; 
      if(bookCount == 0){ 
       takeOutBook.setEnabled(true); 
       returnBook.setEnabled(false); 
      } else if(bookCount == 3){ 
       takeOutBook.setEnabled(false); 
       returnBook.setEnabled(true); 
      } else { 
       takeOutBook.setEnabled(true); 
       returnBook.setEnabled(true); 
      } 
     } 
    } 

    public static void main(String args[]){ 
     ClientGUI GUI = new ClientGUI(); 
     GUI.setSize(300,275); 
     GUI.setTitle("Library"); 
     GUI.setVisible(true); 
    } 
} 

基本上,我需要做的就是讓JList的正常工作。剩下的我可以完成。謝謝。

+3

*「與BreezySwing一起做」*唯一確定的方法它不是該API的錯誤,是準備一個純J2SE的SSCCE。 –

回答

2

嘗試DefaultListModel.addElement

這將觸發更新事件的名單,並在

UPDATE

迴應不知道BreezySwing是如何工作的,我會集中在這條線......

booksOut = addList(4, 1, 2, 1); 

鑑於我認爲代碼中的其他行正在做,這將顯示t o「創建」一個新的Jlist並返回它(應用佈局)。

這意味着booksOut所使用的型號不再是books型號。

嘗試增加

booksOut.setModel(books); 

addList線後,看看有沒有什麼幫助

+0

@AndrewThompson是的,在我發佈之後選擇了這個(在你的懷裏蠕動5個月,而在iPad上並沒有提供一個好的帖子:P) – MadProgrammer

+0

也許你應該讓young'un做打字。這些小手指非常適合平板電腦屏幕的大小(流口水不那麼)。向所有人快樂的蠕動。 :) –

+0

@AndrewThompson她已經知道如何更好地使用它,然後我做到:P – MadProgrammer

2

這裏是一個 '空的結果',你可能會直至斷裂工作..

Expandable List

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class ExpandableList { 

    public static void main(String[] args) { 
     Runnable r = new Runnable() { 
      @Override 
      public void run() { 
       final JPanel gui = new JPanel(new BorderLayout()); 

       String[] listValues = { 
         "Click", "To", "Add", "New", "Values" 
       }; 
       final DefaultListModel model = new DefaultListModel(); 
       for (String s : listValues) { 
        model.addElement(s); 
       } 
       JList list = new JList(model); 
       MouseListener addListener = new MouseAdapter() { 
        @Override 
        public void mouseClicked(MouseEvent me) { 
         String s = JOptionPane.showInputDialog(
           gui, "New text.."); 
         if (s!=null) { 
          model.addElement(s); 
         } 
        } 
       }; 
       list.addMouseListener(addListener); 
       gui.add(new JScrollPane(list)); 

       JOptionPane.showMessageDialog(null, gui); 
      } 
     }; 
     SwingUtilities.invokeLater(r); 
    } 
}