问题描述
|
我有一个简单的示例,其中我对JSplitPane中的组件使用了“ 0”,而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,w,h);
g.drawLine(0,h,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建议-谢谢!)使其正常工作。