让滚动条自适应面板的大小:
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方法来设置大小