我在JScrollPane中有一个JPanel。我在JPanel中绘制内容,有时我可能会绘制超过JScrollPane的宽度。在这种情况下,我希望出现水平滚动条,并且希望能够滚动查看JPanel的不同部分。但是,我最终清除了JScrollPane。

frame = new JFrame();
frame.setBounds(100, 100, 1000, 800);
localScrollPane = new JScrollPane();
localScrollPane.setBounds(768, 6, 226, 350);
frame.getContentPane().add(localScrollPane);
localView = new JPanel();
localScrollPane.setViewportView(localView);

drawSomeThings(localView.getGraphics());
// wait for user input
int newWidth = drawThingsPastTheWidth(localView.getGraphics());

// these next two lines clear it
localView.setPreferredSize(new Dimension(newWidth, localView.getHeight()));
localView.revalidate();


我究竟做错了什么?谢谢!

最佳答案

drawSomeThings(localView.getGraphics());


不要使用getGraphics()方法进行绘画。下次Swing确定需要重新粉刷组件时,粉刷将丢失。

而是通过重写组件的paintComponent()方法来完成自定义绘制。

09-12 11:10