2011-05-01 39 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