JLabel 未在 BoxLayout 中右对齐

JLabel not aligning to the right in a BoxLayout

我在 JPanel (taskPanel) 和 BoxLayout 中有一些 JLabel 组件(在 GridBagLayout 的面板中)和标签拒绝向右对齐。无论我如何操作它们,它们都会保持向左对齐。

这里我为带有标签

的面板设置GridBagConstraints
GridBagConstraints taskPanelC = new GridBagConstraints();
taskPanelC.gridx = 4;
taskPanelC.gridy = 0;
taskPanelC.gridwidth = 1;
taskPanelC.anchor = GridBagConstraints.NORTHEAST;
taskPanelC.weighty = 1;
taskPanelC.weightx = 1;
taskPanelC.insets = new Insets(10, 10, 10, 10);
timePanel.add(taskPanel, taskPanelC);

这是任务面板之前的GridBagConstraints面板

//Setup the gridBagLayout
GridBagConstraints timeTextC = new GridBagConstraints();
timeTextC.gridx = 1;
timeTextC.gridy = 0;
timeTextC.gridwidth = 3;
timeTextC.anchor = GridBagConstraints.CENTER;
timeTextC.weighty = 1;
timeTextC.weightx = 1;

这里我在taskPanel上加了一个header(我真的不在乎这个是怎么对齐的)

taskListLabel = new JLabel("Task List");
taskListLabel.setFont(new Font("Helvetica", Font.BOLD, 24));
taskPanel.add(taskListLabel);

这是我添加我想要的标签的地方 right-justified/aligned。我试过 setHorizontalTextPositionsetAlignmentX 都不起作用,导致文本保持左对齐。但是,当我尝试 setAlignmentX 时,header 与任务标签

不对齐
JLabel task = new JLabel(name, SwingConstants.RIGHT);
//Allow deleting of the label
task.addMouseListener(new ClickListener());
//Add task to the task panel
taskPanel.add(task);

这是目前的样子

我希望任务列表下的文字是right-aligned这样时间总是在右边

这里是完整代码的link,以防摘要不够:Github Repo

从 JLabel API 中查看以下方法:

  1. setHorizontalAlignment(...) - 用于当标签宽度大于文本宽度时对齐文本
  2. setAlignmentX(...) - 可能被布局管理器用来对齐组件

我从 link

复制了整个代码

https://github.com/kennyftang/WorkflowTimer/blob/master/src/WorkflowTimer.java

我猜代码不完整,因为代码中的任何地方都没有调用 addTask(String name) 方法。 我真的很困惑你想把哪个标签放在右边?正如我观察到的 "task list" 已经在右侧。 请提供图片,说明您想要在哪一侧使用哪个标签?另外,不要使用太多的布局,因为这个小 UI 只需一个布局就足够了。

步骤 1 注释以下行。

// taskPanel.add(taskListLabel);

Step2 在那个地方添加以下4行,

JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(taskListLabel, BorderLayout.EAST);
taskPanel.add(panel,BorderLayout.LINE_END);

Step3 注释下面一行。

//taskPanel.add(task);

Step4 在那个地方添加以下4行,

JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(task,BorderLayout.EAST);
taskPanel.add(panel,BorderLayout.LINE_END);

如果您有任何问题,请告诉我。谢谢。 我知道这是一个有点重的解决方案,在这里我们也可以使用一些更轻量级的组件来代替 Jpanel。