Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > Война с LayoutManager-ами скрин с комментами+код


Автор: Killer_13 14.7.2011, 18:18
Хух, целый день веду борьбу с Лейоутами, все-равно что-то вылазит сколько начитался и каждый пример по своему интересен, а у меня лезут косяки.
Вот код, плюс скрин с комментами, Подскажите, промахи буду благодарен, нужно научиться раз, чтоб больше не спрашивать.
Большое человеческое спасибо наперед.
Все вопросы на картинке.

Код


        private void window(){
        this.setPreferredSize(new Dimension(1024, 768));
        this.setMinimumSize(new Dimension(1024, 768));
        this.setLocation(200, 100);
        this.setContentPane(window_panel);
        //this.setResizable(false);

        window_panel.setLayout(new FlowLayout());
        window_panel.setPreferredSize(new Dimension(1024, 722));
        window_panel.setMinimumSize(new Dimension(1024, 722));
        left_panel.setPreferredSize(new Dimension(124,722));
        content_panel.setPreferredSize(new Dimension(874,722));
        left_panel.setBackground(Color.lightGray);
        content_panel.setBackground(Color.yellow);
        window_panel.add(left_panel);
        window_panel.add(content_panel);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        leftPanel();
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (UnsupportedLookAndFeelException e) {
            e.printStackTrace();
        }
        setVisible(true);
    }
    
    private void leftPanel (){
        
        JPanel time_panel = new JPanel();
        JPanel trenn_panel1 = new JPanel();
        JPanel label_panel = new JPanel();
        JPanel trenn_panel2 = new JPanel();
        JPanel frage_panel = new JPanel();
        JPanel trenn_panel3 = new JPanel();
        JScrollPane fragen_scrPane = new JScrollPane(frage_panel);
        
        left_panel.setLayout(new BoxLayout(left_panel, BoxLayout.Y_AXIS));
        time_panel.add(new JLabel("Zeit:"));
        time_panel.setPreferredSize(new Dimension(124,25));
        
        trenn_panel1.setPreferredSize(new Dimension(124,2));
        trenn_panel1.setMinimumSize(new Dimension(124,2));
        trenn_panel1.setBackground(Color.blue);
        
        label_panel.setPreferredSize(new Dimension(124,25));
        label_panel.add(new JLabel("Fragen:"));
        label_panel.setBackground(Color.cyan);
        
        trenn_panel2.setPreferredSize(new Dimension(124,2));
        trenn_panel2.setMinimumSize(new Dimension(124,2));
        trenn_panel2.setBackground(Color.blue);
        
        frage_panel.setLayout(new BoxLayout(frage_panel, BoxLayout.Y_AXIS));
        frage_panel.setPreferredSize(new Dimension(124,666));
        for (int i = 0; i < 60; i++) {
            JLabel b = new JLabel(i + " Frage");
            frage_panel.add(b);
        }
        
        trenn_panel3.setPreferredSize(new Dimension(124,2));
        trenn_panel3.setMinimumSize(new Dimension(124,2));
        trenn_panel3.setBackground(Color.blue);
        
        left_panel.add(time_panel);
        left_panel.add(trenn_panel1);
        left_panel.add(label_panel);
        left_panel.add(trenn_panel2);
        left_panel.add(frage_panel);
        left_panel.add(trenn_panel3);
        
    }


Автор: aleksandy 15.7.2011, 11:47
Код не запускабелен. Приведи код, который можно было бы запустить.

1, 2 http://download.oracle.com/javase/6/docs/api/java/awt/FlowLayout.html#FlowLayout(int,%20int,%20int)
4 http://download.oracle.com/javase/tutorial/uiswing/components/scrollpane.html

Автор: Killer_13 15.7.2011, 12:21
Вот, чуток оптимизировал код, ну тоисть уже с чем-то разобрался, но все равно не срабатывает JScrollPane. В данном случае она нужна и не появляется, а если поставить, чтоб всегда стояла, то все равно не работает. Переделал левую колонку со SpringLayout -интуитивно понятней. 

Как мне убрать отступ между trenn_panel2 и scr_panel?
И еще, скажите пожалуйста, если вручную собирать интерфейс - нужно всегда указывать предпочтительные размеры всего? Или например я в панель добавил 50 меток, и они заняли там все пространство. 

Код.
Код

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.ComponentOrientation;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridLayout;

import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.SpringLayout;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;


public class CopyOfV_TestWin extends JFrame {
    
    private JPanel window_panel = new JPanel();
    private JPanel left_panel = new JPanel();
    private JPanel content_panel = new JPanel();

    public static void main(String[] args) {
        new CopyOfV_TestWin();

    }
    
    public CopyOfV_TestWin(){
        window();
    }
    
    private void window(){
        this.setPreferredSize(new Dimension(1024, 768));
        this.setMinimumSize(new Dimension(1024, 768));
        this.setLocation(200, 100);
        this.setContentPane(window_panel);
        //this.setResizable(false);

        window_panel.setLayout(new FlowLayout());
        window_panel.setPreferredSize(new Dimension(1024, 722));
        window_panel.setMinimumSize(new Dimension(1024, 722));
        left_panel.setPreferredSize(new Dimension(124,722));
        content_panel.setPreferredSize(new Dimension(874,722));
        left_panel.setBackground(Color.lightGray);
        content_panel.setBackground(Color.yellow);
        window_panel.add(left_panel);
        window_panel.add(content_panel);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        leftPanel();
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (UnsupportedLookAndFeelException e) {
            e.printStackTrace();
        }
        setVisible(true);
    }
    
    private void leftPanel (){
        
        SpringLayout sl = new SpringLayout();
        JPanel time_panel = new JPanel();
        JPanel trenn_panel1 = new JPanel();
        JPanel label_panel = new JPanel();
        JPanel trenn_panel2 = new JPanel();
        JPanel frage_panel = new JPanel();
        JPanel scr_panel = new JPanel();
        JPanel trenn_panel3 = new JPanel();
        JScrollPane fragen_scrPane = new JScrollPane(frage_panel);
        fragen_scrPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
        
        
        left_panel.setLayout(sl);
        left_panel.setBackground(Color.red);
        
        time_panel.add(new JLabel("Zeit:"));
        time_panel.setPreferredSize(new Dimension(124,25));
        time_panel.setBackground(Color.magenta);
        time_panel.add(new JLabel("30:00"));
        
        trenn_panel1.setPreferredSize(new Dimension(124,2));
        trenn_panel1.setMinimumSize(new Dimension(124,2));
        trenn_panel1.setBackground(Color.blue);
        
        label_panel.setPreferredSize(new Dimension(124,25));
        label_panel.setMinimumSize(new Dimension(124,25));
        label_panel.add(new JLabel("Fragen:"));
        label_panel.add(new JLabel("30"));
        label_panel.setBackground(Color.cyan);
        
        trenn_panel2.setPreferredSize(new Dimension(124,2));
        trenn_panel2.setMinimumSize(new Dimension(124,2));
        trenn_panel2.setBackground(Color.blue);
        
        frage_panel.setLayout(new BoxLayout(frage_panel, BoxLayout.Y_AXIS));
        frage_panel.setBackground(Color.orange);
        frage_panel.setPreferredSize(new Dimension(106,660));
        frage_panel.setMinimumSize(new Dimension(106,660));
        
        scr_panel.setBackground(Color.green);
        scr_panel.setPreferredSize(new Dimension(124,666));
        scr_panel.setMinimumSize(new Dimension(124,666));
        
        for (int i = 0; i < 50; i++) {
            JLabel b = new JLabel(i + " Frage");
            frage_panel.add(b);
        }
        
        trenn_panel3.setPreferredSize(new Dimension(124,2));
        trenn_panel3.setMinimumSize(new Dimension(124,2));
        trenn_panel3.setBackground(Color.blue);
        
        scr_panel.add(fragen_scrPane);
        left_panel.add(time_panel);
        left_panel.add(trenn_panel1);
        left_panel.add(label_panel);
        left_panel.add(trenn_panel2);
        left_panel.add(scr_panel);
        left_panel.add(trenn_panel3);
        
        sl.putConstraint(SpringLayout.NORTH, trenn_panel1, 0, SpringLayout.SOUTH, time_panel);
        sl.putConstraint(SpringLayout.NORTH, label_panel, 0, SpringLayout.SOUTH, trenn_panel1);
        sl.putConstraint(SpringLayout.NORTH, trenn_panel2, 0, SpringLayout.SOUTH, label_panel);
        sl.putConstraint(SpringLayout.NORTH, scr_panel, 0, SpringLayout.SOUTH, trenn_panel2);
        sl.putConstraint(SpringLayout.NORTH, trenn_panel3, 0, SpringLayout.SOUTH, scr_panel);
    }

}


Автор: Killer_13 15.7.2011, 15:13
Не прошло и дня, разобрал свои вопросы, Вроде чуток подружился с "Лейоутами" Вот оптимизированный код того что меня интересовало, думаю так будет чуток получше? smile

Код

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.ComponentOrientation;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridLayout;

import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.SpringLayout;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.BevelBorder;
import javax.swing.border.EtchedBorder;
import javax.swing.border.LineBorder;


public class CopyOfV_TestWin extends JFrame {
    
    private JPanel window_panel = new JPanel();
    private JPanel left_panel = new JPanel();
    private JPanel content_panel = new JPanel();

    public static void main(String[] args) {
        new CopyOfV_TestWin();

    }
    
    public CopyOfV_TestWin(){
        
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (UnsupportedLookAndFeelException e) {
            e.printStackTrace();
        }
        
        window();
    }
    
    private void window(){
        this.setPreferredSize(new Dimension(1024, 768));
        this.setMinimumSize(new Dimension(1024, 768));
        this.setLocation(200, 100);
        this.setContentPane(window_panel);
        this.setResizable(false);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        window_panel.setPreferredSize(new Dimension(1024, 722));
        window_panel.setMinimumSize(new Dimension(1024, 722));
        left_panel.setPreferredSize(new Dimension(124,722));
        content_panel.setPreferredSize(new Dimension(874,722));
        content_panel.setBackground(Color.yellow);
        window_panel.add(left_panel);
        window_panel.add(content_panel);
        leftPanel();
        
        setVisible(true);
    }
    
    private void leftPanel (){
        
        SpringLayout sl = new SpringLayout();
        JPanel time_panel = new JPanel();
        JPanel label_panel = new JPanel();
        JPanel frage_panel = new JPanel();
        JPanel scr_panel = new JPanel(new BorderLayout());
        JScrollPane scrPane = new JScrollPane(frage_panel);
        scrPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
        
        left_panel.setLayout(sl);
        
        time_panel.add(new JLabel("Zeit:"));
        time_panel.add(new JLabel("30:00"));
        time_panel.setPreferredSize(new Dimension(124,25));
        time_panel.setBorder(BorderFactory.createSoftBevelBorder(BevelBorder.RAISED, Color.gray, Color.black, Color.gray, Color.black));
        
        label_panel.add(new JLabel("Fragen:"));
        label_panel.add(new JLabel("30"));
        label_panel.setPreferredSize(new Dimension(124,25));
        label_panel.setBorder(BorderFactory.createSoftBevelBorder(BevelBorder.RAISED, Color.gray, Color.black, Color.gray, Color.black));
        

        scr_panel.setPreferredSize(new Dimension(124,660));
        scr_panel.setMinimumSize(new Dimension(124,660));
        scr_panel.setBorder(BorderFactory.createSoftBevelBorder(BevelBorder.RAISED, Color.gray, Color.black, Color.gray, Color.black));
        
        frage_panel.setLayout(new BoxLayout(frage_panel, BoxLayout.Y_AXIS));
        
        for (int i = 1; i <= 100; i++) {
            JLabel b = new JLabel("   " + i + " Frage");
            frage_panel.add(b);
        }
        
        scr_panel.add(scrPane);
        left_panel.add(time_panel);
        left_panel.add(label_panel);
        left_panel.add(scr_panel);
        
        sl.putConstraint(SpringLayout.NORTH, label_panel, 5, SpringLayout.SOUTH, time_panel);
        sl.putConstraint(SpringLayout.NORTH, scr_panel, 5, SpringLayout.SOUTH, label_panel);
    }

}


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)