我在JScrollPane上遇到了意外行为: 我的ScrollPanel充满了不同的面板 (需要透明度,因为最后我将在背景中而不是仅使用颜色)
我快速举例说明了我的问题:
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.*;
import javax.swing.border.Border;
public class ScrollPaneTest extends JPanel{
ScrollPaneTest(){
JPanel Content = new JPanel();
BoxLayout ColumnLayout = new BoxLayout(Content,BoxLayout.Y_AXIS);
Content.setLayout(ColumnLayout);
for(int i = 0 ; i < 10 ; i++){
JPanel pane = new JPanel();
JLabel elem = new JLabel("element "+i);
pane.setBackground(new Color(0,0,0,125));
pane.add(elem);
Content.add(pane);
}
Content.setBackground(Color.ORANGE);
JScrollPane scrollPane = new JScrollPane(Content);
scrollPane.setPreferredSize(new Dimension(100,100));
scrollPane.setBackground(new Color(0,0,0,250));
add(scrollPane);
}
public static void main(String[] args) throws Exception {
JFrame f = new JFrame();
JPanel bck = new JPanel();
bck.setBackground(Color.RED);
bck.add(new ScrollPaneTest());
f.add(bck);
f.setSize(200, 200);
f.setVisible(true);
}
}
有了这个,你可以看到当我滚动时,图形都搞砸了:/ 谢谢你的帮助:p
答案 0 :(得分:1)
我有针对您的问题的以下解决方案
滚动元素时,元素不会重新绘制,因此在滚动滚动条时需要重新绘制它们。在此行之后添加以下代码JScrollPane scrollPane = new JScrollPane(Content);
它将起作用!
scrollPane.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener(){
@Override
public void adjustmentValueChanged(AdjustmentEvent e) {
repaint();
}
});