JSplitPane赢得';使用java.awt.Canvas时是否调整大小?

JSplitPane赢得';使用java.awt.Canvas时是否调整大小?,java,graphics,jsplitpane,Java,Graphics,Jsplitpane,我有一个简单的例子,我在JSplitPane中为组件使用java.awt.Canvas,而JSplitPane不允许调整。有人能解释一下原因吗?(更重要的是,如何修复) VerticalSplit.java: import java.awt.BorderLayout; import java.awt.Component; import javax.swing.JPanel; import javax.swing.JSplitPane; abstract public class Vertica

我有一个简单的例子,我在JSplitPane中为组件使用
java.awt.Canvas
,而JSplitPane不允许调整。有人能解释一下原因吗?(更重要的是,如何修复)

VerticalSplit.java:

import java.awt.BorderLayout;
import java.awt.Component;
import javax.swing.JPanel;
import javax.swing.JSplitPane;

abstract public class VerticalSplit {
    public VerticalSplit(JPanel panel)
    {
        panel.setLayout(new BorderLayout());
        JSplitPane jsp = new JSplitPane(JSplitPane.VERTICAL_SPLIT,
            createComponent1(), createComponent2());
        jsp.setResizeWeight(0.5);
        panel.add(jsp, BorderLayout.CENTER);
    }
    abstract protected Component createComponent1();
    abstract protected Component createComponent2();
}
CanvasTest1.java:

import java.awt.Canvas;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class CanvasTest1 extends VerticalSplit
{
    static public class PlainCanvas extends Canvas
    {
        @Override public void paint(Graphics g)
        {
            Dimension d = getSize();
            int h = getHeight();
            int w = getWidth();
            g.drawRect(0,0,w,h);
            g.drawLine(0,0,w,h);
            g.drawLine(0,h,w,0);
        }
    };

    public CanvasTest1(JPanel panel) {  super(panel); }

    @Override protected Component createComponent1() {
        return new PlainCanvas();
    }

    @Override protected Component createComponent2() {
        return new PlainCanvas();
    }

    public static void main(String[] args) {
        JPanel panel = new JPanel();
        CanvasTest1 test = new CanvasTest1(panel);

        JFrame frame = new JFrame(test.getClass().getName());
        frame.setContentPane(panel);

        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

从Canvas改为JPanel(正如@tulskiy所建议的——谢谢!)使它工作正常。

我想可能是重复的,但这些答案似乎对我没有帮助。你到底为什么需要一块画布?你不能直接在JPanel上绘图吗?因为我正在处理一个使用Canvas的预Swing库,并试图找到解决此问题和其他一些问题的最小修复方法。@tulskiy:啊哈!我在库中找到了另一个类,它是post-Swing,并使用JPanel进行绘制。所以这是一个没有意义的问题。