Jump to content
Sign in to follow this  
amvm

JPanel dentro de JPanel

Recommended Posts

amvm

Boas... é possivel colocar um JPanel dentro de outro JPanel mas de modo a que o segundo tenha tamanho mais pequeno e esteja centrado?

Não estou a cnseguir fazer isso :/

public class Visual extends JFrame {

    public Visual(String titulo) {
        super(titulo);

        JPanel p1= new JPanel();

        p1.setBackground(Color.red);
        p1.setSize(new Dimension(100,100));
        this.add(p1);
    }


}

main:

    public static void main(String[] args) throws IOException {

    
        Visual jan = new Visual("Jogo das Sequencias");
            jan.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            jan.setSize(700, 500);
            jan.setVisible(true);
            jan.setLocationRelativeTo(null);
         
    }

cumprimentos.

Share this post


Link to post
Share on other sites
Knitter

Os elementos não se adicionam directamente à JFrame mas sim ao painel raiz desta. Em vez de this.add(p1) seria algo como getContentPane().add(p1).

Share this post


Link to post
Share on other sites
Knitter

Aqui funciona perfeitamente, toda a janela fica vermelha como é suposto.

package jpaneldemo;

import java.awt.Color;
import java.awt.Dimension;
import java.io.IOException;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class JPanelDemo extends JFrame {

    public JPanelDemo(String titulo) {
        super(titulo);

        JPanel p1 = new JPanel();

        p1.setBackground(Color.red);
        p1.setSize(new Dimension(100, 100));
        getContentPane().add(p1);
    }

    public static void main(String[] args) throws IOException {
        JPanelDemo jan = new JPanelDemo("Jogo das Sequencias");
        jan.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jan.setSize(700, 500);
        jan.setVisible(true);
        jan.setLocationRelativeTo(null);

    }
}

Share this post


Link to post
Share on other sites
amvm

mas não era isso que pretendia... pretendia algo deste genero -> Triangulacao4.gif foi o melhor que consegui arranjar, mas eu queria um rectangulo por cima de outro rectangulo, sendo esse segundo de outra cor, mais pequeno e centrado (como podes ver na imagem).

cumps

Share this post


Link to post
Share on other sites
Knitter

Não sendo o que pretendias, foi o que programaste ;).

O desenho dessa imagem é mais simples fazer directamente com Java2D desenhando dentro de um painel em vez de estares a colocar JPanels uns em cima de outros, isso implica trabalhar com os gestores de layout para conseguir algo que seja parecido.

Um exemplo, feito à pressa, de como desenhar manualmente algumas linhas e conseguir o resultado que queres:

Janela principal da aplicação, coloquei um FlowLayout e por isso o painel vai aparecer junto ao topo da janela e não centrado.

package jpaneldemo;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.io.IOException;
import javax.swing.JFrame;

public class JPanelDemo extends JFrame {

    public JPanelDemo(String titulo) {
        super(titulo);

        setLayout(new FlowLayout());
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBackground(Color.yellow);
        setLocationRelativeTo(null);
        setSize(320, 240);

        JPanelDesenho jd = new JPanelDesenho();
        Dimension tamanho = new Dimension(100, 100);
        jd.setSize(tamanho);
        jd.setPreferredSize(tamanho);

        getContentPane().add(jd);

    }

    public static void main(String[] args) throws IOException {
        java.awt.EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new JPanelDemo("Jogo das Sequencias").setVisible(true);
            }
        });
    }
}

O painel central, desenhado manualmente. Para um painel manter o seu tamanho é necessário definir o mesmo com o setSize e com o setPreferedSize, dependendo do layout usado pode ser necessário definir também o tamanho máximo.

package jpaneldemo;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Polygon;
import javax.swing.JPanel;

public class JPanelDesenho extends JPanel {

    @Override
    protected void paintComponent(Graphics grphcs) {
        super.paintComponent(grphcs);

        Graphics2D g2 = (Graphics2D) grphcs;
        g2.setColor(Color.red);
        g2.fillRect(0, 0, getWidth(), getHeight());

        g2.setColor(Color.green);
        g2.drawRect(0, 0, getWidth(), getHeight());
        g2.drawLine(getWidth(), 0, 0, getHeight());

        int[] xs = {0, getWidth(), getWidth()};
        int[] ys = {getHeight(), getHeight(), 0};
        g2.fillPolygon(new Polygon(xs, ys, 3));
    }
}

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.