2016-10-26 3 views
2

Для упражнений по программированию я использую JSplitPane, чтобы сделать окно с красивым рендером фрактала справа, а также другой мусор слева. Однако я столкнулся с очень странной проблемой: левый элемент полностью прав, но правый элемент также всегда выравнивается слева. Насколько я могу судить, правильному элементу присваивается размер правой части экрана, но он всегда полностью слева, а левый элемент поверх него.Java Swing: выравнивание правого элемента в JSplitPane

Я создаю и добавить Панель с ее элементы, как это:

splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true); 

splitPane.add(sidebar, JSplitPane.LEFT); 
splitPane.add(fractalWindow, JSplitPane.RIGHT); 

frame.add(splitPane); 

Я пробовал много различных способов построения и добавления Панель с разделителем компонентов к нему (с использованием setLeftComponent и setRightComponent и т.д.), но все, что я do, оба компонента всегда выравниваются влево. Что я делаю не так?

EDIT: sidebar - JPanel, fractalWindow - подкласс JPanel. Я попытался добавить fractalWindow в другой JPanel и добавить это в splitPane, но тогда правильный компонент вообще не нарисован. Я не указал макет для фрейма JFrame.

EDIT 2: он решен. Мой класс Fractal использовал методы getX() и getY(), и я не знал, что я их переопределяю. Обычно они как правило возвращают 0, а это означает, что JPanel всегда помещался в верхний левый угол родительского компонента.

+0

Возможно, это вызвано макетом «fractalWindow» –

+0

, вы проверили мой ответ? – ItamarG3

+0

1) Чтобы лучше помочь, опубликуйте [MCVE] или [Short, Self Contained, Correct Example] (http://www.sscce.org/). 2) Обеспечить ASCII-искусство или простой рисунок * предназначенного макета GUI при минимальном размере и, если он изменен, с большей шириной и высотой. –

ответ

2

Вы можете попробовать поставить JPanel в правую сторону, и место, что вы хотите от JPanel:

splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true); 

splitPane.add(sidebar, JSplitPane.LEFT); 
JPanel panel = new JPanel(); 
panel.add(fractalWindow,BorderLayout.CENTER); 
splitPane.add(panel, JSplitPane.RIGHT); 

frame.add(splitPane); 

Таким образом, панель выравнивает то, что вы кладете в этом центре, и раскол панель ставит панель справа.

+0

И я думаю, что это может быть решение – GlacialMan

+0

Надеюсь, OP тоже так подумает – ItamarG3

0

Как оказалось, виновниками были два метода в моем Fractal классе:

class Fractal extends JPanel { 

    ... 

    int xpos; 
    int ypos; 

    ... 

    public int getX() { 
     return xpos; 
    } 

    public int getY() { 
     return ypos; 
    } 

    ... 

} 

Эти два метода переопределяют в getX() и getY() в JPanel, которые используются для определения позиции JPanel в его родительский компонент. Это и привело к неправильной работе выравнивания.

Смежные вопросы