JSplitPane игнорирует выравнивание - PullRequest
0 голосов
/ 11 апреля 2019

Привет сообщество StackExchange,

Я в своем уме об этой JSplitPane, которую я пытаюсь вставить в мою рамку, она сидит на правой стороне моей рамки вместо того, чтобы заполнять ее или, по крайней мере, сидит на левой стороне. Если бы кто-нибудь мог помочь мне с этим вопросом, я был бы очень благодарен.

См. Ниже изображение моей проблемы и код

Проблемной областью является панель с "tab1" и "tab2", разделителем и панелью справа от этого разделителя:

enter image description here

Я пытался установить setAlignmentX(Component.LEFT_ALIGNMENT) на всех отдельных частях JSplitPane. Я также попытался сделать JPanel, чтобы удержать его и выровнять это. Все безрезультатно.

Кроме того, существующая информация, которую я смог найти, была неактуальной, в основном люди, обсуждающие, как выровнять содержимое JSplitPane.

Приведенный ниже код - это все, что нужно для создания этого кадра, если кому-то из вас он нужен, чтобы помочь мне чувствовать себя свободно.

package test;

import java.awt.Color;
import java.awt.Component;
import java.util.ArrayList;

import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;

public class FrameMaker {

    public int x = 0;
    private ArrayList<String> mpLabels;
    private JFrame theFrame;

    public void MakeFrame() {
    theFrame = new JFrame("title");
    theFrame.getContentPane().setLayout(new BoxLayout(theFrame.getContentPane(), BoxLayout.Y_AXIS));

    mpLabels = new ArrayList<String>();


    //label1
    JPanel bgSwitches = new JPanel();
    JLabel calcsLabel = new JLabel("top label, broadened with lines to exaggerate problem-------------------------------------------"); 
    bgSwitches.add(calcsLabel);


    //label2
    JPanel topLevel = new JPanel();
    JLabel textinfo = new JLabel("label below that");
    topLevel.add(textinfo);


    //splitpane tabs
    mpLabels.add("tab1");
    mpLabels.add("tab2");           

    String[] mpLabelsAr = new String[mpLabels.size()];
    JList<String> posL = new JList<String>(mpLabels.toArray(mpLabels.toArray(mpLabelsAr)));
    posL.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

    //panel inside the right splitpane pane, this is needed for something later.
    JPanel RPanel = new JPanel();
    RPanel.setLayout(new BoxLayout(RPanel, BoxLayout.Y_AXIS));

    JScrollPane scrollPos = new JScrollPane(posL);
    JScrollPane scrollROI = new JScrollPane(RPanel);

    JSplitPane posPanel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,scrollPos,scrollROI);
    posPanel.setOneTouchExpandable(false);
    posPanel.setDividerLocation(75);


    //label and textfield
    JLabel msLabel = new JLabel("another label");
    JTextField msField = new JTextField("textfield");
    JPanel buttonPanel = new JPanel();
    buttonPanel.add(msLabel);
    buttonPanel.add(msField);

    bgSwitches.setBackground(new Color(0,0,255));
    theFrame.add(bgSwitches);

    topLevel.setBackground(new Color(0,255,0));
    theFrame.add(topLevel);

    posPanel.setAlignmentX(Component.LEFT_ALIGNMENT);
    posPanel.setBackground(new Color(0,255,255));
    theFrame.add(posPanel);

    buttonPanel.setBackground(new Color(255,0,0));
    theFrame.add(buttonPanel);

    theFrame.pack();
    theFrame.setVisible(true);
    }
}

1 Ответ

1 голос
/ 11 апреля 2019

Вам необходимо выровнять все остальные элементы по левому краю.

bgSwitches.setAlignmentX(Component.LEFT_ALIGNMENT);
topLevel.setAlignmentX(Component.LEFT_ALIGNMENT);
buttonPanel.setAlignmentX(Component.LEFT_ALIGNMENT);

Вы также можете добавить posPanel.setResizeWeight(VALUE BETWEEN 0 AND 1);, чтобы указать, какой процент места должен занимать JSplitPane, и он будет изменен с вашим окном.

...