2011-05-01 56 views
0

[感謝您的回答。這對你來說http://www.youtube.com/watch?v=Vo0Cazxj_yc] 這可能並應該是一個非常簡單的問題,但我找不到解決方案。Java applet滾動條

我有一個Java小程序,我想要一個垂直滾動條,以便我可以將數千個按鈕加載到小程序中,並使用滾動條查看小程序rightnow it looks like this上的按鈕。

按鈕用於選擇項目。如果按下按鈕,則選擇該項目。

當我加載按鈕,所有這些都顯示在一個屏幕上,擠在一起,以適應屏幕的寬度和高度(〜1000px,〜1000px)。下面的代碼是我的程序的一部分。請給出意見。

JFrame frame = new JFrame(); 
    NameClassifier nameClassifier = new NameClassifier(); 
    JScrollPane scrollPane = new JScrollPane(nameClassifier); 
    scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 
    frame.add(scrollPane); 
    frame.getContentPane().add(nameClassifier); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.pack(); 
    frame.setVisible(true); 
    System.out.println("exiting"); 
+1

爲了更好地提供幫助。發佈[SSCCE](http://pscode.org/sscce.html)。請注意,我在大約35行代碼中通過代碼片段完成了SSCCE。 – 2011-05-02 03:33:13

+0

順便說一句 - 爲什麼當代碼使用'框架'時,你不斷地引用'小程序'? – 2011-05-02 03:37:45

+0

「數千個按鈕..用於選擇項目。」這聽起來像它更適合啓用多選的'JList'組件。 – 2011-05-02 06:04:21

回答

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

class ManyButtons { 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       JFrame frame = new JFrame(); 
       NameClassifier nameClassifier = new NameClassifier(); 
       JScrollPane scrollPane = new JScrollPane(nameClassifier); 
       scrollPane.setVerticalScrollBarPolicy(
        ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 
       frame.add(scrollPane); 
       // nameClassifier has already been added to the scroll pane. 
       //frame.getContentPane().add(nameClassifier); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.pack(); 
       frame.setVisible(true); 
       System.out.println("exiting"); 
      } 
     }); 
    } 
} 

class NameClassifier extends JPanel { 

    NameClassifier() { 
     super(new GridLayout(0,10,2,2)); 
     for (int ii=1; ii<=1000; ii++) { 
      add(new JButton("Button " + ii)); 
     } 
    } 
} 
0

不要直接添加任何框架,所以

frame.add(scrollPane); 

是錯誤的。

將內容添加到內容窗格。可能

scrollPane.add(nameClassifier); 
frame.getContentPane().add(scrollPane); 

順便說一句,這是一個漂亮的gui設計。 :)

+1

-1,將組件直接添加到框架並沒有錯。自JDK5以來,這一點已得到支持。 – camickr 2011-05-01 21:07:05

+0

MeBigFatGuy,我很樂意與世界分享這個偉大的設計,但只有我會使用它。 – cuneyt 2011-05-02 08:54:08