2012-09-10 32 views
2

我很新的Java和使用NetBeans我。我做了一個JList作爲接受器,它包含在一個jScrollPane中。當我將項目添加到jList時,我希望它堅持到底部,以滾動列表中的最後一個項目。我試圖用ensureIndexIsVisible(int),但它似乎從來沒有任何影響的。ensureIndexIsVisible(INT)不工作

我已經聲明瞭DLM ...

public class ShoppingCart extends javax.swing.JFrame { 

DefaultListModel dlm = new DefaultListModel(); 

而且現在用它來填充列表....

private void PrintToReceipt(){ 

    JList Receipt = new JList(dlm); 

    dlm.addElement(ItemQuantity + "@ " + Money.format(ItemPrice) + " * " + TaxRate.format(ItemTax) + "% = " + Money.format(ItemTotal)); 

    Receipt.ensureIndexIsVisible(Receipt.getSelectedIndex()); 

} 

我也嘗試過的getSelectedIndex變化,而只是把我的變量來跟蹤我添加了多少項目,沒有任何工作。當我添加更多,然後可以在視口中看到,它簡單的不斷添加它們,但滾動條停留在頂部。 誰能給我任何想法還有什麼我能試試嗎?

+1

爲更好地幫助更快張貼[SSCCE(HTTP:// SSCCE .org /) – mKorbel

+1

請學習java命名約定並堅持使用它們。 – kleopatra

回答

4

檢查有什麼選擇的指標值。也嘗試包裹ensureIndexIsVisible在SwingUtilities.invokeLater

+1

與ListSelectionListener – mKorbel

3

有兩種方法:

通過包裝ensureIndexIsVisibleinvokeLater(如@Stas提到1)直接

使用ListSelectionListener,例如

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

public class ListOneItem extends JFrame implements ListSelectionListener { 

    private static final long serialVersionUID = 1L; 

    public ListOneItem() { 
     setLayout(new GridLayout(1, 2)); 
     String[] numbers = {"one", "two", "three", "four", "five", "six", "seven"}; 
     final JList list = new JList(numbers); 
     list.setVisibleRowCount(1); 
     list.addListSelectionListener(this); 
     JScrollPane scrollPane = new JScrollPane(list); 
     scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER); 
     scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); 
     add(scrollPane); 
     Runnable doRun = new Runnable() { 

      @Override 
      public void run() { 
       list.setSelectedIndex(3); 
      } 
     }; 
     SwingUtilities.invokeLater(doRun); 
    } 

    @Override 
    public void valueChanged(final ListSelectionEvent e) { 
     JList list = (JList) e.getSource(); 
     list.ensureIndexIsVisible(list.getSelectedIndex()); 
    } 

    public static void main(String[] args) { 
     Runnable doRun = new Runnable() { 

      @Override 
      public void run() { 
       ListOneItem frame = new ListOneItem(); 
       frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
       frame.setLocationRelativeTo(null); 
       frame.pack(); 
       frame.setVisible(true); 
      } 
     }; 
     SwingUtilities.invokeLater(doRun); 
    } 
} 
+0

嗯......沒什麼用的例子太多的錯誤(除非不防範isValueAdjusting),但已經沒有太大的做的添加/保證_added_行可見... – kleopatra

+0

@kleopatra正確的評論,請確實沒有按」不要讓我有任何意義來解決這個問題, – mKorbel