[英]Drawing on a JPanel inside JScrollPane
我正在尝试使用重写paintComponent
方法的类绘制到JPanel中。
整个面板重新粉刷时,此方法工作正常。 当我向左,向上或向下滚动或调整大小时,效果很好。 将滚动条向右移动整个“页面”似乎也可以正常工作。
但是,当我向右滚动,通过拖动栏或单击小调整按钮时,图形似乎在应设置位置的左侧略有偏移,当与部分重绘结合使用时,其结果是笔直线路损坏。
此示例重现该问题。 只需运行它,然后将水平滚动条拖动一点。
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class test {
private class MyPanel extends JPanel {
public MyPanel() {
super();
}
public Dimension getPreferredSize() {
return new Dimension(2000, 200);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawLine(0, 0, 2000, 200);
g.drawLine(0, 200, 2000, 0);
}
}
private JFrame frame;
private JScrollPane sp;
private MyPanel mp;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
test window = new test();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public test() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mp = new MyPanel();
sp = new JScrollPane(mp);
frame.add(sp);
}
}
这是我得到的:
我究竟做错了什么?
显然,这是OpenJDK 7中的错误。
在OpenJDK 8中,完全相同的代码无需重新编译即可工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.