【问题标题】:JSplitPane ignoring alignmentJSplitPane 忽略对齐
【发布时间】:2019-09-02 06:49:53
【问题描述】:

您好 StackExchange 社区,

我对这个试图放入框架的 JSplitPane 束手无策,它位于框架的右侧,而不是填充它或至少位于左侧。 如果有人能帮助我解决这个问题,我将非常感激。

见下图我的问题和代码

问题区域是带有“tab1”和“tab2”的窗格、分隔线和该分隔线右侧的窗格:

我尝试在 JSplitPane 的所有单独部分上设置 setAlignmentX(Component.LEFT_ALIGNMENT)。我也尝试过制作一个 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);
    }
}

【问题讨论】:

    标签: java user-interface layout alignment jsplitpane


    【解决方案1】:

    您还需要将所有其他元素都向左对齐。

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

    您还可以添加posPanel.setResizeWeight(VALUE BETWEEN 0 AND 1); 以指定JSplitPane 应占用的空间百分比,它将随您的窗口调整大小。

    【讨论】:

    • 嘿,成功了!非常感谢。我不完全确定为什么需要这样做?例如,如果我想要一半的元素左对齐而其他元素居中/右对齐,我会怎么做?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2014-09-17
    • 2019-11-10
    • 2019-02-04
    • 2020-01-06
    • 2019-03-17
    相关资源
    最近更新 更多