繁体   English   中英

另一个Jpanel中的Jpanel

[英]Jpanel inside another Jpanel

我面临一个我认为很容易解决的问题,但我无法解决。 所以我有一个主jpanel,我不能在另一个类中插入另一个jpanel2,jpanel2的组件没有出现在第一个。
这是第一个jpanel构造函数的代码:

 public PainelPrincipal(Jogo janela) {`  
    super();  
    painel = new JPanel(){  
        protected void paintComponent(java.awt.Graphics g) { 
            super.paintComponents(g); 
            try{  
                g.drawImage(ImageIO.read(PainelPrincipal.class.getResource("Imagens/fundo/Fundo0.jpg")), 0, 0, this);  
            }catch(IOException e){  
                `e.printStackTrace();  
            } 
        };
    };  
    painel.setPreferredSize(new Dimension(1024, 768));  
    janela.setContentPane(painel);  
    painel.setLayout(null);  
    painelBonus = new PainelBonus();  
    painelBonus.setBounds(199, 537, 352, 156);  
    painel.add(painelBonus);  

    painelVida = new PainelVida();
    painelVida.setBounds(856, 426, 73, 267);
    //painelVida.setBounds();
    painel.add(painelVida);

    lblPontuacao = new JLabel("Pontua\u00E7\u00E3o: 0");
    lblPontuacao.setForeground(new Color(255, 69, 0));
    lblPontuacao.setBounds(0, 0, 1024, 22);
    lblPontuacao.setBackground(new Color(128, 0, 0));
    lblPontuacao.setOpaque(true);
    lblPontuacao.setHorizontalAlignment(SwingConstants.CENTER);
    painel.add(lblPontuacao);

    JLabel labelEsq = new JLabel("");
    labelEsq.setBackground(new Color(128, 0, 0));
    labelEsq.setOpaque(true);
    labelEsq.setBounds(0, 21, 11, 747);
    painel.add(labelEsq);

    GridPanel gridPanel_1 = new GridPanel();
    gridPanel_1.setBounds(10, 33, 767, 418);
    gridPanel_1.setShowGridLines(true);
    gridPanel_1.setRowSize(40);
    gridPanel_1.setColumnSize(40);
    gridPanel_1.setColumns(18);
    painel.add(gridPanel_1);

    JLabel labelDir = new JLabel("");
    labelDir.setOpaque(true);
    labelDir.setBackground(new Color(128, 0, 0));
    labelDir.setBounds(1013, 21, 11, 747);
    painel.add(labelDir);
}

这段代码painelBonus = new PainelBonus(); 用所有组件执行构造函数PainelBonus:

public PainelBonus() {  
    super();  
    painel = new JPanel();  
    painel.setBackground(new Color(0, 0, 0));  
    painel.setBorder(null);  
    painel.setPreferredSize(new Dimension(300, 157));  
    painel.setLayout(null);  

    imagemMartelo = new ImageIcon(PainelBonus.class.getResource("/Imagens/bonus/bonus_martelo/bonus_martelo_0.png"));
    imagemBomba = new ImageIcon(PainelBonus.class.getResource("/Imagens/bonus/bonus_bomba/bonus_bomba_0.png"));

    JButton btnImagemMartelo = new JButton("");
    btnImagemMartelo.setBounds(10, 11, 136, 136);
    btnImagemMartelo.setIcon(imagemMartelo);
    btnImagemMartelo.setContentAreaFilled(false);
    painel.add(btnImagemMartelo);

    JButton btnImagemBomba = new JButton("");
    btnImagemBomba.setBounds(154, 11, 136, 136);
    btnImagemBomba.setIcon(imagemBomba);
    btnImagemBomba.setContentAreaFilled(false);
    painel.add(btnImagemBomba);
}

这是问题所在:PainelBonus的组件似乎没有出现在PainelPrincipal上

截图: http//imgur.com/2wdZAOW

对不起,格式不好,这是新的:D
TY气垫船充满鳗鱼,可帮助您编辑:D

PainelBonus似乎是从JPanel (或其他一些基于Component的类)扩展而来的,它创建了自己的JPanelpainel = new JPanel(); ),并向其中添加了一些组件,但从未将面板( painel )添加到PainelBonus

同样, PainelPrincipal创建一个JPanelpainel ,您可以在其中添加其他组件,包括PainelBonus但此面板( painel )永远不会添加到任何东西。

不要使用null布局。 完美的像素布局是现代UI设计中的一种错觉,您无法控制字体,DPI,渲染管线或其他因素,这些因素会改变组件在屏幕上的渲染方式。

Swing旨在与布局经理一起克服这些问题。 如果您坚持不理会这些功能并反对API设计,请为许多麻烦做好准备,并且永不结束艰苦的工作...

更新了一个例子

public PainelPrincipal(Jogo janela) {`  
    super();  
    painel = new JPanel(){  
        protected void paintComponent(java.awt.Graphics g) { 
            super.paintComponents(g); 
            try{  
                // You shouldn't be loading resources in the paint method
                // And infact, this could be achieved by using a JLabel instead
                // of creating a custom JPanel
                g.drawImage(ImageIO.read(PainelPrincipal.class.getResource("Imagens/fundo/Fundo0.jpg")), 0, 0, this);  
            }catch(IOException e){  
                e.printStackTrace();  
            } 
        };
    };  
    //...
    setLayout(new BorderLayout());
    add(painel);
}

public PainelBonus() {  
    super();  
    setBackground(new Color(0, 0, 0));  
    setBorder(null);  
    setPreferredSize(new Dimension(300, 157));  
    setLayout(null);  

    imagemMartelo = new ImageIcon(PainelBonus.class.getResource("/Imagens/bonus/bonus_martelo/bonus_martelo_0.png"));
    imagemBomba = new ImageIcon(PainelBonus.class.getResource("/Imagens/bonus/bonus_bomba/bonus_bomba_0.png"));

    JButton btnImagemMartelo = new JButton("");
    btnImagemMartelo.setBounds(10, 11, 136, 136);
    btnImagemMartelo.setIcon(imagemMartelo);
    btnImagemMartelo.setContentAreaFilled(false);
    add(btnImagemMartelo);

    JButton btnImagemBomba = new JButton("");
    btnImagemBomba.setBounds(154, 11, 136, 136);
    btnImagemBomba.setIcon(imagemBomba);
    btnImagemBomba.setContentAreaFilled(false);
    add(btnImagemBomba);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM