我在JLabel
(JPanel
)中有taskPanel
个BoxLayout
组件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
这是我要添加我想要右对齐/对齐的标签的地方。我尝试了setAlignmentX
和setAlignmentX
,两者都不起作用,导致文本保持左对齐。但是,当我尝试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
答案 0 :(得分:4)
从JLabel API中查看以下方法:
setHorizontalAlignment(...)
- 用于在标签宽度大于文字宽度时对齐文字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。