JLabel未在BoxLayout中右对齐

时间:2017-02-01 01:30:58

标签: java swing jlabel layout-manager boxlayout

我在JLabelJPanel)中有taskPanelBoxLayout组件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

在这里,我向taskListLabel = new JLabel("Task List"); taskListLabel.setFont(new Font("Helvetica", Font.BOLD, 24)); taskPanel.add(taskListLabel); 添加一个标题(我真的不在乎这是如何对齐的)

setHorizontalTextPosition

这是我要添加我想要右对齐/对齐的标签的地方。我尝试了setAlignmentXsetAlignmentX,两者都不起作用,导致文本保持左对齐。但是,当我尝试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); 时,标题与任务标签

不一致
__str__

这就是目前的img http://image.prntscr.com/image/6dca2d88cc194212b1a27b6c1028f537.png

我希望任务列表下的文字是右对齐的,所以时间总是在右边

以下是完整代码的链接,以防摘要不足:Github Repo

2 个答案:

答案 0 :(得分:4)

从JLabel API中查看以下方法:

  1. setHorizontalAlignment(...) - 用于在标签宽度大于文字宽度时对齐文字
  2. setAlignmentX(...) - 布局管理器可能会使用它来对齐组件

答案 1 :(得分:0)

我从链接中复制了整个代码

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

我猜代码是不完整的,因为在代码中的任何地方都没有调用addTask(String name)方法。 我真的很困惑你想要哪个标签在右边?当我观察到"任务列表"已经在右侧了。 请提供图片说明您想在哪一侧贴上标签?此外,不要使用这么多布局,并且对于这个小UI而言只是一个布局就足够了。

步骤1评论以下行。

// taskPanel.add(taskListLabel);

步骤2在该位置添加以下4行

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

Step3评论以下一行。

//taskPanel.add(task);

步骤4在该位置添加以下4行

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

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