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。我试过 setHorizontalTextPosition
和 setAlignmentX
都不起作用,导致文本保持左对齐。但是,当我尝试 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 中查看以下方法:
setHorizontalAlignment(...)
- 用于当标签宽度大于文本宽度时对齐文本
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。
我在 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。我试过 setHorizontalTextPosition
和 setAlignmentX
都不起作用,导致文本保持左对齐。但是,当我尝试 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 中查看以下方法:
setHorizontalAlignment(...)
- 用于当标签宽度大于文本宽度时对齐文本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。