2017-02-01 11 views
0

У меня есть некоторые JLabel компоненты в JPanel (taskPanel) с BoxLayout (который находится в панели с GridBagLayout) и метки отказываются быть приведены в соответствие с правой стороны. Они продолжают выравниваться слева, независимо от того, как я ими манипулирую.JLabel не центрирующие вправо в BoxLayout

Здесь я настроить 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); 

Это то, что в настоящее время он выглядит как img http://image.prntscr.com/image/6dca2d88cc194212b1a27b6c1028f537.png

Я хочу, чтобы текст под список задач, чтобы быть выровнен по правому краю, так что время всегда на правой

Вот ссылка на полный код в случае резюме было недостаточно: Github Repo

+3

Мы не хотим, чтобы фрагменты кода или полный код. Скорее вы захотите создать и опубликовать действительный [mcve]. Пожалуйста, посмотрите [помощь], а также разделы [как спросить хорошие вопросы] (http://stackoverflow.com/help/how-to-ask) для получения дополнительной информации о том, как улучшить свой вопрос и увеличить свои шансы получить достойную помощь. –

+3

'taskListLabel.setFont (новый шрифт (« Helvetica », Font.BOLD, 24));' Не в этом окне Windows. По умолчанию шрифт unecorated (без засечек) - Arial, а Helvetica просто недоступен. Лучше использовать константу для неупорядоченного шрифта, а именно 'Font.SANS_SERIF'. Это будет использовать Helvetica для OS X, Arial для Windows и все, что не используется по умолчанию, для unixorated на системах * nix. –

+1

Ahh Я вижу, спасибо, я хотел использовать константу, но не смог найти ее. – kenyunot

ответ

4

Заканчивать следующие методы из API JLabel:

  1. setHorizontalAlignment(...) - используется для выравнивания текста, когда ширина этикетки больше ширины текста
  2. setAlignmentX(...) - может быть использован менеджером компоновки для выравнивания компоненты
+0

Я пробовал setHorizontalAlignment (JLabel.RIGHT) и он не работал должным образом, я добавил картинку, чтобы показать, что происходит – kenyunot

+0

@ Kennyftang картинка не помогает. Проблема связана с вашим кодом и тем, как вы используете менеджеров компоновки. Ваш вопрос был задан в первом комментарии к вашему вопросу, чтобы отправить сообщение «MCVE». – camickr

+0

Извините, я немного не понял. Я изменил макет, и теперь все это под 1 gridbaglayout. Как оказалось, я должен был установить как заголовок, так и отдельные метки с помощью setAlignmentX, и, наконец, он работал. Спасибо!!! – kenyunot

0

Я скопированный весь код по ссылке

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

Я предполагаю, что код является неполным, так как AddTask (имя String) мето d не вызывается нигде в коде. Я действительно смущен, о какой этикетке вы хотите быть на правой стороне? Как я заметил, «список задач» уже находится на правильной стороне. Просьба представить изображение, объясняющее, какой ярлык вы хотите с какой стороны? Кроме того, не используйте так много макетов и путайте этот маленький пользовательский интерфейс, достаточно одного макета.

Шаг 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 мы можем использовать и некоторые даже легкие компоненты.

+0

Извините, что неясно, я добавил картинку для объяснения – kenyunot

+0

Спасибо Kennyftang – NewToJava

+0

Я отредактировал свой ответ, надеюсь, что он будет работать нормально. – NewToJava