JSplitPane赢得';使用java.awt.Canvas时是否调整大小?
我有一个简单的例子,我在JSplitPane中为组件使用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
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进行绘制。所以这是一个没有意义的问题。