我尝试使用覆盖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);
}
}
这就是我得到的:
我做错了什么?
答案 0 :(得分:1)
显然这是OpenJDK 7中的一个错误。
完全相同的代码在OpenJDK 8中无需重新编译即可运行。