Bla*_*ein 0 java swing jscrollpane
有时(并非总是)在滚动我的JScrollPane栏时,一些组件(通常是像JLabel这样的文本)不能正确重新绘制,它们最终只是部分渲染.
我不知道为什么会这样.我已经尝试在AdjustmentListener中调用paint(),但这似乎没有帮助.
有任何想法吗?
编辑:组件的初始化
panel = new JPanel();
ImageIcon img = new ImageIcon("editor.png");
setIconImage(img.getImage());
initComponents();
final JScrollPane pane = new JScrollPane(panel);
this.setContentPane(pane);
//pane.setLayout(new ScrollPaneLayout());
//pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
Dimension dim = panel.getSize();
dim.height = dim.height - 100;
pane.setSize(dim);
this.setSize(dim);
AdjustmentListener hListener = new AdjustmentListener() {
@Override
public void adjustmentValueChanged(AdjustmentEvent e) {
repaint();
for(Component c : panel.getComponents())
c.repaint();
for(Component c : pane.getComponents())
c.repaint();
panel.repaint();
panel.revalidate();
pane.repaint();
pane.revalidate();
}
};
pane.getVerticalScrollBar().addAdjustmentListener(hListener);
panel.setVisible(true);
pane.setVisible(true);
Run Code Online (Sandbox Code Playgroud)
违反任何这些基本原则都可能导致渲染失真.
验证仅在事件派发线程上构造和操作Swing GUI对象.
确保您遵守不透明度属性.特别JLabel是,默认情况下不是不透明的.
"Swing程序应该覆盖paintComponent()而不是覆盖paint()." - 在AWT和Swing中绘画:绘制方法.
附录:结合这些dicta,这个相关的例子滚动了成千上万的闪存JLabel实例,没有工件.
| 归档时间: |
|
| 查看次数: |
1056 次 |
| 最近记录: |