我有一个 BVH 播放器,它有 9 个视图,可以在计时器上为它们设置动画,我试图将控件放在每个面板的顶部以单独控制变换操作。
按钮呈现在我的paintComponent 后面,但有时可以单击。我还有一个 MouseListener 来调整骨架的变换,有时它可以工作。我可以发布听众,但我认为这并不重要。
我尝试了 graphics.dispose 和 graphics2d.dispose 的各种组合,并尝试以奇怪的结果改变 super.paintComponent(g) 的位置,但没有任何好处。
下面是显示问题的视频。如果您仔细观察,当您将鼠标悬停在它们应该出现的位置时,您会看到按钮弹出。您还会看到,当我 g.dispose() 时,它在两个地方的按钮变得陌生,但只在一个地方单击(这不是它们最明显的地方)。 https://youtu.be/CyFpUlbFI1U
这是我的源代码:
public SkeletonPlayer(int camera, double scale, int rotLeftRight, int rotUpDown, double translateLeftRight, double translateUpDown) {
this.camera = camera;
this.scale = scale;
this.rotLeftRight = rotLeftRight;
this.rotUpDown = rotUpDown;
this.translateLeftRight = translateLeftRight;
this.translateUpDown = translateUpDown;
panel = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.translate(getWidth() / 2, getHeight() / 2);
AffineTransform at = AffineTransform.getTranslateInstance(0, 0);
at.rotate(Math.toRadians(90), Math.toRadians(90), Math.toRadians(90));
for (int n = 0; n < MainFrame.skeleton[camera].getNodes().size(); n++) {
Node node = MainFrame.skeleton[camera].getNodes().get(n);
int x1 = (int) (scale * node.getPosition().getX());
int y1 = (int) (-scale * node.getPosition().getY());
g2d.setColor(Color.RED);
g2d.fillOval((int) (x1 - 2), (int) (y1 - 2), 4, 4);
g2d.setColor(Color.BLACK);
//g2d.drawString(node.getName(), x1 + 10, y1);
for (Node child : node.getChildrens()) {
int x2 = (int) (scale * child.getPosition().getX());
int y2 = (int) (-scale * child.getPosition().getY());
g2d.drawLine(x1, y1, x2, y2);
}
}
}
}
};
Cats萌萌
Helenr
临摹微笑
相关分类