是否可以将z索引设置为java图形?

是否可以将z索引设置为java图形?,java,swing,Java,Swing,我实现了一个时钟,其中秒针和分针扩展了同一个组件JClockHand。我有这样的死刑, 但这不是我想要的。我想知道是否有任何可能的方法来设置图形z索引以重叠不同的图形?提前谢谢 sechand.png minhand.png 使用JLayeredPane。像这样 public ClockFrame(){ int frameWidth = 1000; int frameHeight = 1000; setDefaultCloseOperation(JFrame.EXIT_O

我实现了一个时钟,其中秒针和分针扩展了同一个组件JClockHand。我有这样的死刑, 但这不是我想要的。我想知道是否有任何可能的方法来设置图形z索引以重叠不同的图形?提前谢谢

sechand.png

minhand.png


使用JLayeredPane。像这样

public ClockFrame(){
    int frameWidth = 1000;
    int frameHeight = 1000;
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setPreferredSize(new Dimension(frameWidth, frameHeight));
    setLayout(new BorderLayout());

    JLayeredPane pane = new JLayeredPane();
    pane.setOpaque(true);
    pane.setBackground(Color.BLACK);
    add(pane);

    SecondHand sHand=new SecondHand("sechand.png");
    MinuteHand mHand=new MinuteHand("minhand.png");

    mHand.setBounds(0, 0, frameWidth, frameHeight);
    sHand.setBounds(0, 0, frameWidth, frameHeight);

    pane.add(mHand, 1);
    pane.add(sHand, 2);

    pack();
    setResizable(false);
    setVisible(true);
}
您必须手动设置JLayeredPane组件的位置和大小,因为JLayeredPane不是LayoutManager


引用了一些方法。除非这是为了练习(尽管我怀疑:练习什么?),否则你应该在一个组件中画手。是的,这是一种练习。我打算将渲染和左渲染分开,由基本组件完成。我本来打算这么做的,我试着用JLayeredPane替换原来的面板,但是2个JComponent仍然坚持占据他们喜欢的大小的2个不同维度。我认为问题可能在于ClockHand的原始设置。相关帖子,或者是
GridBagLayout
:PMy的建议,如果你想学习swing,那就停下来学习Java FX吧。它更强大
public ClockFrame(){
    int frameWidth = 1000;
    int frameHeight = 1000;
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setPreferredSize(new Dimension(frameWidth, frameHeight));
    setLayout(new BorderLayout());

    JLayeredPane pane = new JLayeredPane();
    pane.setOpaque(true);
    pane.setBackground(Color.BLACK);
    add(pane);

    SecondHand sHand=new SecondHand("sechand.png");
    MinuteHand mHand=new MinuteHand("minhand.png");

    mHand.setBounds(0, 0, frameWidth, frameHeight);
    sHand.setBounds(0, 0, frameWidth, frameHeight);

    pane.add(mHand, 1);
    pane.add(sHand, 2);

    pack();
    setResizable(false);
    setVisible(true);
}