java - JSplitPane 忽略对齐
问题描述
您好 StackExchange 社区,
我对这个试图放入框架的 JSplitPane 束手无策,它位于框架的右侧,而不是填充它或至少位于左侧。如果有人可以帮助我解决这个问题,我将非常感激。
请参阅下面的问题图片和代码
问题区域是带有“tab1”和“tab2”的窗格、分隔线和该分隔线右侧的窗格:
我已经尝试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);
}
}
解决方案
您还需要将所有其他元素向左对齐。
bgSwitches.setAlignmentX(Component.LEFT_ALIGNMENT);
topLevel.setAlignmentX(Component.LEFT_ALIGNMENT);
buttonPanel.setAlignmentX(Component.LEFT_ALIGNMENT);
您还可以添加posPanel.setResizeWeight(VALUE BETWEEN 0 AND 1);
以指定JSplitPane
应占用的空间百分比,它将随您的窗口调整大小。
推荐阅读
- json - 检查结果是否为空字符串
- javascript - 如何设置 Wix 在事件发生时发出 HTTP 请求
- matlab - 什么 matlab 命令或命令组合(使用 25 个字符或更少)可用于创建以下矩阵?
- python - 有没有办法迭代时间并在之后返回函数?
- html - 如何在智能手机上显示两个相邻的 div?
- join - 将多个选项卡与 Google 表格中的常用表格相结合
- javascript - 在 for 循环中为每个循环设置多个对象
- sql - SQL Developer 错误地解释了来自谷歌表格的字符串
- yii2 - yii2 url manager 规则接受不模式
- javascript - 如何使用 Google Photos API 搜索具有特定文件名的照片?