我在jscrollpane中动态的添加了一组radiobutton,但添加后的东西超过jscrollpane的大小 范围,超出的部分就看不到了,也没有出现可以拖拽的滚动条
ButtonGroup buttongroup = new ButtonGroup();
JscrollPane jscrollpane = new JscrollPane();
while(int i=0;i<15:i++){
JRadioButton button = new JRadioButton();
button.setName(Integer.toString(i));
button.setText(Integer.toString(i));
button.setBounds(20,(20*(i+1)),60,30);
button.setVisible(true);
buttongroup.add(button);
jscrollpane.add(button);
}
jscrollpane.updateUI();
jscrollpane.validate();

解决方案 »

  1.   

    JButton Button 都没有实现ScrollAble接口,任何没有实现ScrollAble的元素放到JScrollpane的组件都无法实现滚动条的效果,这就是问题的根源
      

  2.   

    jscrollpane虽然间接继承自 Container。滚动的内容却不是使用 add添加的。
      

  3.   

    嗯,谢谢知道了
    我现在先把一个pane加入到jscrollpane中,然后再把这些radiobutton放入到这个pane中,可以实现滚动条了,但是现在又有一个问题,我的这个pane不能根据我的radiobutton的数量来自动调节其大小 ,以使所有的radiobutton都能正常显示出来
      

  4.   


    那是用什么呢
    setviewPort()吗,这个我试过也不行
      

  5.   


    完整的代码在另外一台电脑上面
    JscrollPane和Jpanel都是用netbean自动生成的,所以一些初始化的东西我就不写了JscrollPane jscrollpane = new JscrollPane();
    Jpanel panel = new Jpanel();
    jscrollpane.setViewportView(panel);//这是动态生成并显示radiobutton的代码
    ButtonGroup buttongroup = new ButtonGroup();
    panel.removeall();
    while(int i=0;i<15:i++){
    JRadioButton button = new JRadioButton();
    button.setName(Integer.toString(i));
    button.setText(Integer.toString(i));
    button.setBounds(20,(20*(i+1)),60,30);
    button.setVisible(true);
    buttongroup.add(button);
    panel.add(button);
    }
    panel.updateUI();
    panel.validate();
    jscrollpane.updateUI();
    jscrollpane.validate();
      

  6.   

    JScrollPane jscrollpane = new JScrollPane();
    Box vbox = Box.createVerticalBox();
    jscrollpane.setViewportView(vbox);//这是动态生成并显示radiobutton的代码
    ButtonGroup buttongroup = new ButtonGroup();
    vbox.removeall();
    for(int i=0;i<15:i++){
        JRadioButton button = new JRadioButton(Integer.toString(i));
        buttongroup.add(button);
        vbox.add(button);
    }
    vbox.revalidate();
    jscrollpane.updateUI();
    jscrollpane.validate();
      

  7.   

    Box vbox = Box.createVerticalBox();
    JScrollPane jscrollpane = new JScrollPane(vbox);
    ButtonGroup buttongroup = new ButtonGroup();//这是动态生成并显示radiobutton的代码
    vbox.removeall();
    vbox.revalidate();for(int i=0;i<15:i++){
        JRadioButton button = new JRadioButton(Integer.toString(i));
        buttongroup.add(button);
        vbox.add(button);
        vbox.revalidate();
    }
    其他都是多余的代码
      

  8.   

    遍历Panel上控件,自动计算所需Panel大小,而后在执行setsize