【发布时间】:2012-03-03 14:20:50
【问题描述】:
我正在尝试在多个面板上画一条线(图像中的红线),但我似乎无法使其工作。我怎样才能做到这一点?有什么建议?
【问题讨论】:
-
顺便说一句 - 图片不错,但以后请把它们剪得更小。我用裁剪后的版本(430×375px)替换了原始版本。
标签: java swing graphics jpanel
我正在尝试在多个面板上画一条线(图像中的红线),但我似乎无法使其工作。我怎样才能做到这一点?有什么建议?
【问题讨论】:
标签: java swing graphics jpanel
在glass pane上画图。
【讨论】:
2) J(X)Layer, 3) JViewport 4) GlassPane,
JDK 7 在任意组件之上添加了JLayer to support visual decorations。对于早期版本,有一个项目JXLayer at java.net,它实际上是它的前身,具有非常相似的 api
这是一个基本示例,使用自定义 LayerUI,它从容器中的一个组件到不同容器中的另一个组件绘制一条直线。两个容器的共同父级使用该 ui 装饰有 JLayer:
JComponent comp = Box.createVerticalBox();
final JComponent upper = new JPanel();
final JButton upperChild = new JButton("happy in upper");
upper.add(upperChild);
final JComponent lower = new JPanel();
final JButton lowerChild = new JButton("unhappy in lower");
lower.add(lowerChild);
comp.add(upper);
comp.add(lower);
LayerUI<JComponent> ui = new LayerUI<JComponent>() {
@Override
public void paint(Graphics g, JComponent c) {
super.paint(g, c);
Rectangle u = SwingUtilities.convertRectangle(upper, upperChild.getBounds(), c);
Rectangle l = SwingUtilities.convertRectangle(lower, lowerChild.getBounds(), c);
g.setColor(Color.RED);
g.drawLine(u.x, u.y + u.height, l.x, l.y);
}
};
JLayer<JComponent> layer = new JLayer<JComponent>(comp, ui);
【讨论】: