天天看点

JScrollPane滚动条的控制

让滚动条自适应面板的大小:

package swing;

import java.awt.Dimension;

import java.awt.Graphics;

import java.awt.Rectangle;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import javax.swing.*;

public class JScrollPaneStudy extends JComponent {

 Rectangle rect;

 static JScrollPane pane = new JScrollPane();

 public JScrollPaneStudy() {

  rect = new Rectangle(0, 0, 400, 400);

  this.addMouseListener(new MouseAdapter() {

   public void mouseClicked(MouseEvent e) {

    System.out.println("go here ,press up key!");

    rect.width -= 10;

    rect.height -= 10;

    JScrollPaneStudy.this.setPreferredSize(new Dimension(

      rect.width, rect.height));

    pane.setViewportView(JScrollPaneStudy.this);

    JScrollPaneStudy.this.getParent().repaint();// JMyWidget自己重绘了,但是滚动条拽一下窗口才出现……

    // 如何让JScrollPane知道滚动条需要重画?

   }

  });

 }

 public void paintComponent(Graphics g) {

  g.fillRect(rect.x, rect.y, rect.width, rect.height);

 }

 public static void main(String[] args) {

  JFrame frame = new JFrame();

  JScrollPaneStudy myw = new JScrollPaneStudy();

  pane.setViewportView(myw);

  frame.add(pane);

  frame.setSize(200, 150);

  frame.setVisible(true);

  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

 }

}

使用JScrollPane的setPreferredSize方法来设置大小