java swing GridBagLayout中添加两个垂直的JScrollPane

denchao0124 2016-11-13 05:14:33

如图,我需要垂直添加两个JScrollPane。而他们俩分配的大小不一样,所以我用了GridBagLayout布局。但我在实际操作的时候发现,GridBagLayout只能设置相对的大小。而JScrollPane必须超过大小才显示滚动条,所以他们俩矛盾了。最后直接不显示了。求教
...全文
219 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
denchao0124 2016-11-15
  • 打赏
  • 举报
回复
我已经解决了,jscrollpane是大于组件的,用c.anchor = GridBagConstraints.NORTHEAST;这个方式一设置就显示了,谢谢。发现csdn没有人回答了
denchao0124 2016-11-13
  • 打赏
  • 举报
回复
jscrollpanel是在超过一定限度的时候用滚动条显示。可是在gridbaglayout中组件是相对大小,没有固定大小。所以在gridbaglayout中,jscrollpanel开始出现滚动的限制是什么?多大开始滚动?所以,我感觉这就是一对矛盾。求大神解决,谢谢谢谢
denchao0124 2016-11-13
  • 打赏
  • 举报
回复
引用 1 楼 YidingHe 的回复:
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

可以总是显示垂直滚动条


不成啊,我现在的问题是直接不显示。因为gridbaglayout本来不能设定组件的直接大小,它是相对的。而jscrollpanel也在布局中无法有固定的大小。所以很直接显示不出来东西,如图

麻烦您仔细看看,谢谢谢谢,我想了一天了也没解决。
具体代码:
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.ScrollPane;
import java.awt.Toolkit;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;

/**
* @author JiaWenRuo
* @date 2016-10-18 下午12:42:17
* @version
* @TODO
*/
public class Test extends JFrame{

/**
* @param args
*/
JScrollPane jScrollPane;
JPanel jPanel;
JLabel jLabel;
JSplitPane jSplitPane;
public Test(){
setSize(Toolkit.getDefaultToolkit().getScreenSize().width, Toolkit.getDefaultToolkit().getScreenSize().height/6);
GridBagLayout gridBagLayout = new GridBagLayout();
setLayout(gridBagLayout);
GridBagConstraints c = new GridBagConstraints();
//上边随便用标签代替
jLabel = new JLabel("ss");
c.weightx =100;
c.weighty =100;
c.gridwidth = GridBagConstraints.REMAINDER;
c.gridheight = 1;
c.gridx= 0;
c.gridy = 0;
gridBagLayout.setConstraints(jLabel, c);
add(jLabel);

jPanel = new JPanel(new GridLayout(10,1));
for (int i = 0; i < 10; i++) {
jPanel.add(new JButton("ss"));
}
//下边滚动竖直显示10个按钮
jScrollPane = new JScrollPane(jPanel,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
c.weightx =100;
c.weighty =0;
c.gridwidth = GridBagConstraints.REMAINDER;
c.gridheight = 1;
c.gridx= 0;
c.gridy = 1;
gridBagLayout.setConstraints(jScrollPane, c);

jSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT,jLabel,jScrollPane);
jScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

add(jScrollPane);

}
public static void main(String[] args) {
// TODO Auto-generated method stub
new Test().setVisible(true);
}

}

捏造的信仰 2016-11-13
  • 打赏
  • 举报
回复
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 可以总是显示垂直滚动条

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧