Layout do Eclipse [RESOLVIDO]

E ae pessoal, tudo certo? Alguém sabe dizer qual é o gerenciador de layout usado na construção da IDE Eclipse? Em outras palavras, como eu faço pra implementar um gerenciador de layout que funcione igual ao da própria IDE Eclipse, com as outras janelas sendo redimensionadas de acordo com o panel project explorer?

SWT

1 curtida

O eclipse não utiliza Swing, ao invés disso ele utiliza SWT, são frameworks para interface gráfica completamente diferentes.
Entretanto, você pode sim criar janelas com características iguais ao das janelas do eclipse.
Acontece que você não utiliza somente um gerenciador de layout, utiliza vários.
Cabe à você ter a criatividade de segregar suas telas em diversos painéis independentes, cada um com seu próprio layout e depois reunir estes painéis em outros painéis com outros gerenciadores de layout.

Exemplo hipotético:

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSplitPane;
import javax.swing.UIManager;

public class Exemplo {

    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            Exemplo programa = new Exemplo();
            programa.executar();
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

    public void executar() {
        JFrame janela = criarJanelaPrincipal();
        janela.setSize(800, 600);
        janela.setLocationRelativeTo(null);
        janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        janela.setVisible(true);
    }

    private MenuBar criarBarraMenu() {
        MenuBar menuBar = new MenuBar();
        menuBar.add(criarMenuArquivo());
        return menuBar;
    }

    private JFrame criarJanelaPrincipal() {
        JFrame frame = new JFrame("Exemplo");
        frame.setMenuBar(criarBarraMenu());
        frame.setContentPane(criarPainelPrincipal());
        return frame;
    }

    private Menu criarMenuArquivo() {
        Menu menu = new Menu();
        menu.add(new MenuItem("MenuItem 1"));
        menu.add(new MenuItem("MenuItem 2"));
        menu.add(new MenuItem("MenuItem 3"));
        menu.add(new MenuItem("MenuItem N"));
        return menu;
    }

    private Component criarPainelConsole() {
        JPanel panel = new JPanel(new BorderLayout());
        panel.add(new JLabel("Console"), BorderLayout.CENTER);
        return panel;
    }

    private Component criarPainelDireita() {
        JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, criarPainelEditor(), criarPainelConsole());
        return splitPane;
    }

    private Component criarPainelEditor() {
        JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, criarPainelFonte(), criarPainelOutline());
        return splitPane;
    }

    private Component criarPainelEsquerda() {
        JPanel panel = new JPanel(new BorderLayout());
        panel.add(new JLabel("PackageExplorer"), BorderLayout.CENTER);
        return panel;
    }

    private Component criarPainelFonte() {
        JPanel panel = new JPanel(new BorderLayout());
        panel.add(new JLabel("Codigo Fonte"), BorderLayout.CENTER);
        return panel;
    }

    private Component criarPainelOutline() {
        JPanel panel = new JPanel(new BorderLayout());
        panel.add(new JLabel("Outline"), BorderLayout.CENTER);
        return panel;
    }

    private Container criarPainelPrincipal() {
        JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, criarPainelEsquerda(), criarPainelDireita());
        return splitPane;
    }
}
2 curtidas

Entendi! A sacada que estava me faltando era realmente essa, combinações de gerenciadores… Muito obrigado Staroski, seu exemplo me ajudou muito.

1 curtida