Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java awt.canvas在JScrollPane中时未剪裁_Java_Swing_Canvas_Awt_Jscrollpane - Fatal编程技术网

Java awt.canvas在JScrollPane中时未剪裁

Java awt.canvas在JScrollPane中时未剪裁,java,swing,canvas,awt,jscrollpane,Java,Swing,Canvas,Awt,Jscrollpane,我有一个JScrollPane,它的视口中有一个JPanel,里面有许多较小的JPanel,最里面的每个JPanel中都有一个awt.Canvas 将JScrollPane滚动到任何画布跨越JScrollPane边界的位置时,画布将在边界外绘制;在JScrollPane区域外的屏幕上可见 我本以为画布会自动剪裁,但显然情况并非如此。我是否必须手动设置剪裁,或者是否有另一种方法可以自动在JScrollPane边框处剪裁画布?因为我仍然建议不要在没有最重要原因的情况下将AWT和Swing组件混合在一

我有一个JScrollPane,它的视口中有一个JPanel,里面有许多较小的JPanel,最里面的每个JPanel中都有一个awt.Canvas

将JScrollPane滚动到任何画布跨越JScrollPane边界的位置时,画布将在边界外绘制;在JScrollPane区域外的屏幕上可见

我本以为画布会自动剪裁,但显然情况并非如此。我是否必须手动设置剪裁,或者是否有另一种方法可以自动在JScrollPane边框处剪裁画布?

因为我仍然建议不要在没有最重要原因的情况下将AWT和Swing组件混合在一起

也许可以用这段代码重现

import java.awt.*;
import javax.swing.*;

public class AwtSwing {

    private JPanel panel = new JPanel(new GridLayout(8, 8, 10, 10));

    public AwtSwing() {
        for (int i = 0; i < 36; i++) {
            Canvas cnv = new Canvas();
            JPanel panelInner = new JPanel(new BorderLayout());
            panelInner.add(cnv, BorderLayout.CENTER);
            panel.add(panelInner);
        }
        JFrame f = new JFrame("JTableExample");
        f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        f.add(new JScrollPane(panel), BorderLayout.CENTER);
        f.pack();
        f.setLocation(150, 150);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                AwtSwing awtSwing = new AwtSwing();
            }
        });
    }
}
import java.awt.*;
导入javax.swing.*;
公共级AwtSwing{
私有JPanel面板=新JPanel(新网格布局(8,8,10,10));
公共AwtSwing(){
对于(int i=0;i<36;i++){
Canvas cnv=新画布();
JPanel panelInner=newjpanel(newborderlayout());
panelInner.add(cnv,BorderLayout.CENTER);
面板。添加(面板内部);
}
JFrame f=新的JFrame(“JTableExample”);
f、 setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f、 添加(新的JScrollPane(面板),BorderLayout.CENTER);
f、 包装();
f、 设置位置(150150);
f、 setVisible(真);
}
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(新的Runnable(){
公开募捐{
AwtSwing AwtSwing=新的AwtSwing();
}
});
}
}

您必须以演示您的问题的形式在此处发布代码。您应该使用最新的jdk版本(正如@mKorbel已经指出的)您是对的,问题在于awt与Swing的混合。扩展JPanel而不是awt.Canvas,并将paint(Graphics g)方法重命名为paintComponent(Graphics g),解决了剪切问题。