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


Автор: Killer_13 13.7.2011, 19:36
Здравств, Обычное окошко. В окошке хочу поставить 2 панели одна за другой определенных размеров, почему-то выравнивает по центру все. Подскажите. Спасибо.
Код

import java.awt.Color;
import java.awt.FlowLayout;

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


public class V_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 V_TestWin();

    }
    
    public V_TestWin(){
        window();
    }
    
    private void window(){
        setSize(1024, 768);
        setLocation(200, 100);
        this.getContentPane().add(new JLabel("Label"));
        this.setLayout(new FlowLayout());
        left_panel.setSize(424, 768);
        content_panel.setSize(424, 768);
        left_panel.setBorder(BorderFactory.createLineBorder(Color.green));
        left_panel.add(new JButton("left"));
        content_panel.add(new JButton("content"));
        window_panel.add(left_panel);
        window_panel.add(content_panel);
        add(window_panel);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

}


Автор: toxx 13.7.2011, 19:54
Java туториалы не существуют походу?)
Код

private FlowLayout mMainLayout = new FlowLayout();
...
mMainLayout.setAlignment(FlowLayout.LEFT);
setLayout(mMainLayout);

Автор: Killer_13 13.7.2011, 20:04
Хорошо, а как объяснить то что когда я даю рамку для панели она у меня вот такая. Вот чуток измененный код. Ну почему, по логике вещей должно и так работать. :(
Код

import java.awt.Color;
import java.awt.FlowLayout;

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


public class V_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 V_TestWin();

    }
    
    public V_TestWin(){
        window();
    }
    
    private void window(){
        setSize(1024, 768);
        setLocation(200, 100);
        this.getContentPane().add(window_panel);
        this.setLayout(new FlowLayout());
        left_panel.setSize(424, 768);
        content_panel.setSize(600, 768);
        left_panel.setBorder(BorderFactory.createLineBorder(Color.green));
        left_panel.add(new JButton("left"));
        content_panel.setBorder(BorderFactory.createLineBorder(Color.blue));
        content_panel.add(new JButton("content"));
        window_panel.add(left_panel);
        window_panel.add(content_panel);
        add(window_panel);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

}


Автор: toxx 13.7.2011, 20:10
По логике каких вещей чтото должно работать?И что с рамкой не так?

Автор: Killer_13 13.7.2011, 20:20
Я хочу, чтоб эти панели заняли то пространство что для них отведено, 
Я же указал для них размер: 
Код

        left_panel.setSize(424, 768);
        content_panel.setSize(600, 768);

тоисть соответственно первая рамка шириной 424, вторая 600, получается что они у меня одинакового размера.

Автор: toxx 13.7.2011, 20:34
Зачем Layout's понимаете?(просто не совсем видимо)
Код

window_panel.setLayout(null);
setContentPane(window_panel);

Автор: Killer_13 13.7.2011, 20:46
Я понимаю зачем Layoutы, зачем сарказничать, разобрать хочу.
Ну вот 
Код

window_panel.setLayout(null);

Делает так как хочу, только одну на другую, Нужен Flow, но FlowLayout обрезает, - почему не знаю.

А с этой строкой даже не запускается
Код

setContentPane(window_panel);

Код

Exception in thread "main" java.lang.IllegalArgumentException: adding container's parent to itself
    at java.awt.Container.checkAddToSelf(Container.java:472)
    at java.awt.Container.addImpl(Container.java:1083)
    at java.awt.Container.add(Container.java:998)
    at javax.swing.JFrame.addImpl(JFrame.java:562)
    at java.awt.Container.add(Container.java:410)
    at V_TestWin.window(V_TestWin.java:39)
    at V_TestWin.<init>(V_TestWin.java:23)
    at V_TestWin.main(V_TestWin.java:18)


Добавлено через 6 минут и 23 секунды
Увидел ошибку, убрал 
Код

add(window_panel);

Автор: toxx 13.7.2011, 20:53
Вообще написано где ошибка
at V_TestWin.window(V_TestWin.java:39),
следовательно строку 
Код

add(window_panel);

нужно убрать
и я не сарказничаю, а всеголишь уточняю

Автор: Killer_13 13.7.2011, 20:57
smile Уже сам увидел где ошибка, это то понятно все, но вот как мне сделать чтоб панель content_panel начиналась там, где заканчивается left_panel. Если Layou(null) они ставятся друг на друга, Если FlowLayout() тогда получается вариант как на скриншоте, что я прикреплял.  

Автор: toxx 13.7.2011, 21:06
Вероятно както так 
Код

left_panel.setBounds(0,0,424, 768);
content_panel.setBounds(424,0,600, 768);

В свинге не силён, поэтому возможны более простые способы например в андроиде есть 
лэйаут в относительных координатах и там достаточно в xml прописать layout_below(above etc.)

Автор: Killer_13 13.7.2011, 21:12
Спасибо, так пошло, пока оставлю так, если кто-то не подскажет как правильнее, хотя дума. так тоже правильно. smile
Можно сказать вопрос решен.

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