jscollpane 高度_java-设置包含JScrollPane的容器的大小,以使滚...

如何设置包含JScrollPane的容器的大小,以使滚动条不出现?

考虑以下SSCCE(使用MigLayout):

public static void main(String[] args) {

JPanel panel = new JPanel(new MigLayout());

for(int i = 0; i < 15; i++) {

JTextArea textArea = new JTextArea();

textArea.setColumns(20);

textArea.setRows(5);

textArea.setWrapStyleWord(true);

textArea.setLineWrap(true);

JScrollPane jsp = new JScrollPane(textArea);

panel.add(new JLabel("Notes" + i));

panel.add(jsp, "span, grow");

}

JScrollPane jsp = new JScrollPane(panel);

JFrame frame = new JFrame();

frame.add(jsp);

frame.pack();

frame.setSize(jsp.getViewport().getViewSize().width, 500);

frame.setLocationRelativeTo(null);

frame.setVisible(true);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

如您所见,我正在尝试找出要放在此行中的内容:

frame.setSize(jsp.getViewport().getViewSize().width, 500);

目的是相对于视口的内容设置宽度,以便不需要水平滚动条.

应该:

编辑:根据camikr的建议,这是结果:

public static final int pref_height = 500;

public static void main(String[] args) {

JPanel panel = new JPanel(new MigLayout());

for(int i = 0; i < 15; i++) {

JTextArea textArea = new JTextArea();

textArea.setColumns(20);

textArea.setRows(5);

textArea.setWrapStyleWord(true);

textArea.setLineWrap(true);

JScrollPane jsp = new JScrollPane(textArea);

panel.add(new JLabel("Notes" + i));

panel.add(jsp, "span, grow");

}

JScrollPane jsp = new JScrollPane(panel) {

@Override

public Dimension getPreferredSize() {

setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

Dimension dim = new Dimension(super.getPreferredSize().width + getVerticalScrollBar().getSize().width, pref_height);

setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);

return dim;

}

};

JFrame frame = new JFrame();

frame.add(jsp);

frame.pack();

frame.setLocationRelativeTo(null);

frame.setVisible(true);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

对我来说似乎有点骇人听闻,但确实有效.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值