我设计了一个简单的JPanel
扩展,我期望它能够在它的范围之外绘制:
public class JGlassPanel extends JPanel {
@Override
protected void paintBorder(Graphics g) {
}
@Override
protected void paintComponent(Graphics g) {
if( getParent() != null ) {
g.setClip(-getX(), -getY(), getX() + getWidth(), getY() + getHeight());
}
super.paintComponent(g);
}
}
这个类的测试表明它只能部分工作(下面的代码)。例如,按钮在面板外绘制,而背景在边界内感觉,按钮视觉效果也在边界内感觉。
是否可以将所有视觉特征扩展到任意区域?
更新
我发现覆盖contains
制作按钮也在面板之外起作用(对点击做出反应)。同时,视觉效果和背景仍在组件范围内。
使用代码
public class Tester_JGlassPanel_01 {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JButton button = new JButton("my button");
button.setBounds(-50, -20, 100, 40);
JGlassPanel panel = new JGlassPanel();
//JPanel panel = new JPanel();
panel.setLayout(null);
panel.setBackground(Color.RED);
panel.setBounds(100, 100, 100, 100);
panel.add(button);
JFrameEx frame = new JFrameEx();
frame.setLayout(null);
frame.add(panel);
frame.setSize(0.5);
frame.center();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}