Duvida num GridLayout em um JScrollPane

1 resposta
C

Alguem pode me falar o q esta de errado nesse codigo???
Eu soh consigo ver um JPanel na minha tela. Quando uso o debug para ver ele add um por um, eh como se ele trocasse o panel visivel...
Como arrumo isso?

Ah! tinha tentado usar layout null antes, e colocar tudo com setBounds, mas n aparecia... tem como fazer isso?

import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import javax.swing.*;

public class Mapa extends JFrame {

    private JScrollPane mapa;
    private Container menu;

    public Mapa() {
        setSize(700, 500);
        setLocationRelativeTo(null);
        setLayout(new GridLayout(1, 2));
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        mapa = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS  ,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        menu = new Container();

        add(menu);
        add(mapa);
        GridLayout a = new GridLayout(2, 2);
        mapa.getViewport().setLayout(a);
        JPanel[] teste = new JPanel[4];
        setVisible(true);
        for(int x = 0; x < 4; x++) {
            teste[x] = new JPanel();
            switch(x) {
                case 0:
                teste[x].setBackground(new Color(50, 0, 0));
                break;
                case 1:
                teste[x].setBackground(new Color(100, 100,0));
                break;
                case 2:
                teste[x].setBackground(new Color(0, 150, 150));
                break;
                case 3:
                teste[x].setBackground(new Color(200, 200, 200));
                break;
            }
            mapa.getViewport().add(teste[x]);
            teste[x].setLayout(new FlowLayout());
            teste[x].add(new JLabel("TEST "+(x+1)));
            
        }
        
        menu.setLayout(new FlowLayout());
        menu.add(new JLabel("ab11"));
        menu.add(new JButton("ab111111111111111"));
    }
}

1 Resposta

M

É esse o resultado esperado?

import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class Mapa extends JFrame {

	private static final long serialVersionUID = 1L;
	private JScrollPane scroll;
	private JPanel conjuntoDePaineis;
	private JPanel menu;

	public Mapa() {
		// primeiro, o menu
		menu = new JPanel();
		menu.setLayout(new FlowLayout());
		menu.add(new JLabel("Olá"));
		menu.add(new JButton("Mundo?"));
		// depois os paineis
		conjuntoDePaineis = new JPanel();
		conjuntoDePaineis.setLayout(new GridLayout(0, 2));
		for (int i = 0; i < 4; i++) {
			JPanel panel = new JPanel();
			panel.setBackground(new Color((255 / 4) * i, (255 / 4) * i,
					(255 / 4) * i));
			panel.add(new JLabel("Painel " + i));
			// para testar o scroll pane, aumentamos o tamanho de cada painel
			panel.setPreferredSize(new Dimension(400, 300));
			conjuntoDePaineis.add(panel);
		}
		// e o scroll pane
		scroll = new JScrollPane();
		scroll.setViewportView(conjuntoDePaineis);
		// agora, adicionamos tudo
		setLayout(new GridLayout(0, 2));
		add(menu);
		add(scroll);
		setSize(700, 500);
		setLocationRelativeTo(null);
		setDefaultCloseOperation(DISPOSE_ON_CLOSE);
	}

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

			@Override
			public void run() {
				new Mapa().setVisible(true);
			}

		});
	}

}
Criado 5 de dezembro de 2009
Ultima resposta 7 de dez. de 2009
Respostas 1
Participantes 2