jpanel网格布局添加滚动条_终于搞明白如何将一个JPanel放置到JScrollPane里面并显示滚动条了...

一开始,我是知道不能直接在

JScrollPane对象里用add()的,需要获取它的视图板

getViewport();这是一个JViewport对象,然后在这上面添加,而且它不能添加轻量级组件。

我弄了一个JPanel,上面用网格布局10行1列的,本来想,把这个板添加到Viewport上就行了,结果发现,没有出现滚动条,于是我设置Viewport的布局方式,用尽了都不行。比如说用NULL布局吧,然后把Panel设长,结果Panel确实变长了,但滚动条不出来

经过费心苦想,我直接设置了一下Panel的setPerferredSize(Dimension dim),dim的参数我用的是Viewport的getDemension所得。这下好了,哈哈,安装上去实现了滚动。

===============

附上一个例子

因为scrollPane是根据里面的子控件的preferredSize来确定滚动条的。

让image尺寸变化时,scrollPane能得到新的数据。

解决方式有两种,一种是改变大小时重新设置JPanel的preferred size;

一种是重载getPreferredSize()方法,按照需要返回,楼主的情况可以返回当前

图片的大小的Dimension。

import java.awt.Dimension; import java.awt.Graphics; import java.awt.Image; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; public class ScrollPaneDemo extends JFrame implements MouseListener {         ImagePanel jp;                  JScrollPane jsp;         public ScrollPaneDemo() {                 super("JScrollPane Demo");                 jp = new ImagePanel();                 jp.setPreferredSize(new Dimension(600, 400));                 jsp = new JScrollPane(jp);                 jp.addMouseListener(this);                 getContentPane().add(jsp);                 setSize(640, 480);                 setDefaultCloseOperation(EXIT_ON_CLOSE);                 setVisible(true);         }         public void mouseClicked(MouseEvent e) {                 System.out.println("mouseClicked");                 jp.enlarge();                 jp.setPreferredSize(jp.getPreferredSize());                 jsp.validate();         }         public void mousePressed(MouseEvent e) {                 // System.out.println("mousePressed");         }         public void mouseReleased(MouseEvent e) {                 // System.out.println("mouseReleased");         }         public void mouseEntered(MouseEvent e) {                 // System.out.println("mouseEntered");         }         public void mouseExited(MouseEvent e) {                 // System.out.println("mouseExited");         }         public static void main(String[] args) {                 new ScrollPaneDemo();         } } class ImagePanel extends JPanel {         private Image image;         private Dimension theSize = new Dimension(600, 400);         public void setImage(Image image) {                 this.image = image;                 this.repaint();         }         public Image getImage() {                 return this.image;         }         public void paintComponent(Graphics g) {                 ImageIcon img = new ImageIcon("Winter.jpg");                 g.drawImage(img.getImage(), 0, 0, theSize.width, theSize.height, null);         }         public void enlarge() {                 theSize.width = (theSize.width * 101) / 100;                 theSize.height = (theSize.height * 101) / 100;                 setSize(theSize);         }                  public Dimension getPreferredSize() {                 return this.theSize;         } }

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值