JLabel属性更改时进入顶层

问题描述 投票:0回答:1

我的挥杆有什么问题吗?程序。我在这里搜索过,但是没有答案,所以我发布了这个。

这里是示例代码:

public class main{

    private static JFrame frame;

    private static JLayeredPane layered;

    private static JPanel panel1;
    private static JPanel panel2;
    private static JPanel bg_change;
    private static JLabel txt_bg;
    private static JLabel txt_change;

    private static JButton btnBG;
    private static JButton btnTEXT;

    public static void main(String[] args) {

        frame = new JFrame();
        frame.setBounds(0,0,500,500);
        frame.setVisible(true);
        frame.setLayout(null);


            layered = new JLayeredPane();
            layered.setBounds(0,0,frame.getWidth(),frame.getHeight());
            layered.setLayout(null);
            layered.setOpaque(true);
            layered.setBackground(Color.GRAY);
            frame.add(layered);

                panel1 = new JPanel();
                panel1.setBounds(10,10,300,300);
                panel1.setOpaque(true);
                panel1.setLayout(null);
                panel1.setBackground(Color.RED);
                layered.add(panel1,0);

                    btnBG = new JButton("BTN_BG");
                    btnBG.setBounds(100,50,0,0);
                    btnBG.setSize(btnBG.getPreferredSize());
                    panel1.add(btnBG);

                    btnTEXT = new JButton("BTN_TXT");
                    btnTEXT.setBounds(100,100,0,0);
                    btnTEXT.setSize(btnTEXT.getPreferredSize());
                    panel1.add(btnTEXT);

                panel2 = new JPanel();
                panel2.setBounds(50,50,300,300);
                panel2.setOpaque(true);
                panel2.setLayout(null);
                panel2.setBackground(Color.BLUE);
                layered.add(panel2,1);

                    bg_change = new JPanel();
                    bg_change.setBounds(240,240,50,50);
                    bg_change.setOpaque(true);
                    bg_change.setLayout(null);
                    bg_change.setBackground(Color.ORANGE);

                    txt_change = new JLabel("TESTTESTETST");
                    txt_change.setBounds(240,30,0,0);
                    txt_change.setSize(txt_change.getPreferredSize());
                    txt_change.setOpaque(false);

                    panel2.add(bg_change);
                    panel2.add(txt_change);


        frame.repaint();
        addListner();

    }

    public static void addListner() {
        btnBG.addMouseListener(new MouseListener() {

            @Override
            public void mouseReleased(MouseEvent e) {

            }

            @Override
            public void mousePressed(MouseEvent e) {

            }

            @Override
            public void mouseExited(MouseEvent e) {

            }

            @Override
            public void mouseEntered(MouseEvent e) {

            }

            @Override
            public void mouseClicked(MouseEvent e) {
                bg_change.setBackground(Color.GREEN);

            }
        });

        btnTEXT.addMouseListener(new MouseListener() {

            @Override
            public void mouseReleased(MouseEvent e) {

            }

            @Override
            public void mousePressed(MouseEvent e) {

            }

            @Override
            public void mouseExited(MouseEvent e) {

            }

            @Override
            public void mouseEntered(MouseEvent e) {

            }

            @Override
            public void mouseClicked(MouseEvent e) {
                txt_change.setText("CLICKCLICKCLICKK");
                txt_change.setSize(txt_change.getPreferredSize());
            }
        });
    }
}

单击按钮,然后每个目标组件将更改其背景色或文本。按钮工作,但我希望目标组件留在红色面板后面。我该怎么办?

感谢阅读。

java swing jlabel
1个回答
0
投票

两个问题:

  1. “ int”参数不同于“ Integer”参数。分层窗格希望您使用Integer来指定该层的约束。阅读Container.add(…) API,了解不同的重载方法,以了解“ int”和“ Object”之间的区别,作为add(…)方法的参数。
  2. 具有较高Integer值的组件画在顶部。

有几处变更:

//layered.add(panel1, 0);
layered.add(panel1, new Integer(1));

...

//layered.add(panel2,1);
layered.add(panel2, new Integer(0));

而且,您不应该使用所有静态变量和方法。这表明设计不佳。

我建议您阅读Swing教程的How to Use Layered Panes部分,以获取更多信息和结构更好的代码示例。

© www.soinside.com 2019 - 2024. All rights reserved.