jpanel网格布局添加滚动条_Java的JPanel(流式布局)添加到JScrollPane滚动窗格后垂直滚动条不正常且流式布局特点没了?求解答。...

本文探讨了Java中JPanel使用流式布局添加到JScrollPane后,滚动条显示异常及布局特点消失的问题。通过调整组件大小并监听窗口事件,确保了垂直滚动条的正确显示和流式布局的保持。
摘要由CSDN通过智能技术生成

在你的代码中改了一下,主要是这一句

jp.setPreferredSize(new Dimension(jsp.getWidth(), 150 * 21));

用panel的setPreferredSize来控制一下容器的大小,

---------------------------------------------------

又给你改了一下,需要用侦听事件,这样你以前的主是不很方便了,又写了一个,你看一下吧。

---------------------------------------------------

import java.awt.Container;

public class AppFrame extends JFrame implements ComponentListener {

private JButton[] jbt = new JButton[100];

private JPanel panel = new JPanel();

private JScrollPane scrollPane = new JScrollPane();

private int len = 150;

public AppFrame() {

Container containerPane = getContentPane();

containerPane.setLayout(new BoxLayout(containerPane, BoxLayout.Y_AXIS));

scrollPane = new JScrollPane();

scrollPane.setBounds(12, 10, 816, 433);

getContentPane().add(scrollPane);

scrollPane.setViewportView(panel);

for (int i = 0; i < jbt.length; i++) {

jbt[i] = new JButton("OK" + i);

jbt[i].setPreferredSize(new Dimension(len, len));

panel.add(jbt[i]);

}

containerPane.add(scrollPane);

setVisible(true);

setDefaultCloseOperation(EXIT_ON_CLOSE);

setSize(848, 480);

setLocationRelativeTo(null);

this.addComponentListener(this);

}

public static void main(String[] args) {

new AppFrame();

}

public void componentHidden(ComponentEvent arg0) {

}

public void componentMoved(ComponentEvent arg0) {

}

public void componentResized(ComponentEvent arg0) {

// 竖滚动条的宽是20,减去以后,就没有横向滚动条了。

int width = scrollPane.getWidth() - 20;

int number = width / len;

int row = jbt.length / number + 1;

int height = len * row;

int intr = 0;

if (jbt.length % number != 0) {

intr = 100;

}

height += intr;

panel.setPreferredSize(new Dimension(width, height));

repaint();

}

public void componentShown(ComponentEvent arg0) {

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值