tl; dr: я хочу сделать то, что на втором рисунке (игнорировать красные линии)
Я понимаю, как работает GroupLayout, но я не могу понять это, и возможно ли это вообще. У меня изначально был этот код:
#Horizontal layout is a parallel group containing 3 sequences of components
layout.setHorizontalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING) #everything else to the right
.addGroup(layout.createSequentialGroup() #row 1
.addComponent(startTimeLabel)
.addComponent(self.lastUpdatedLabel))
.addGroup(layout.createSequentialGroup() #row 2
.addComponent(self.progressBar)
.addComponent(self.clearBtn))
.addGroup(layout.createSequentialGroup() #row 3
.addComponent(self.fileProgLabel)
.addComponent(self.sizeProgLabel)
.addComponent(self.ETCLabel))))
, который произвел это:
Однако я хочу выровнять 2 верхние метки в начале и конце индикатора выполнения и 3 нижних метки в начале, середине и конце индикатора выполнения следующим образом (mspainted):
Мой первый подход к этому состоял в том, чтобы попытаться разделить компоненты на параллельные группы, которые я создал с помощью приведенных выше строк. Я поставил распорки по обе стороны от индикатора выполнения, совместив 4 конечных надписи с ними, и выровнял центральную метку относительно самого индикатора выполнения:
#Horizontal layout is a sequence of 3 parallel groups of components, and an end component
layout.setHorizontalGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING) #starttime, strut, filesprog
.addComponent(startTimeLabel)
.addComponent(progLeft) #invisible, just for gluing things to
.addComponent(self.fileProgLabel))
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.CENTER) #progress bar, sizeprog
.addComponent(self.progressBar)
.addComponent(self.sizeProgLabel))
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING) #updatetime, strut, ETC
.addComponent(self.lastUpdatedLabel)
.addComponent(progRight) #invisible, just for gluing things to
.addComponent(self.ETCLabel))
.addComponent(self.clearBtn))
Однако, как я и ожидал, это заставило индикатор выполнения втиснуться в горизонтальное пространство между двумя верхними метками, например так:
Наконец, я подумал о том, чтобы избавиться от распорок и добавить индикатор выполнения к трем отдельным параллельным группам: выровненный LEADING
с двумя левыми метками, CENTER
с средней меткой и TRAILING
с правой метка:
#Horizontal layout is a sequence of 4 parallel groups of components
layout.setHorizontalGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING) #starttime, progleft, filesprog
.addComponent(startTimeLabel)
.addComponent(self.progressBar)
.addComponent(self.fileProgLabel))
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.CENTER) #progmid, sizeprog
.addComponent(self.progressBar)
.addComponent(self.sizeProgLabel))
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING) #updatetime, progright, ETC
.addComponent(self.lastUpdatedLabel)
.addComponent(self.progressBar)
.addComponent(self.ETCLabel))
.addComponent(self.clearBtn))
Однако Swing явно игнорирует второе и третье упоминания индикатора выполнения, и в итоге я получаю следующее:
Полагаю, я неплохо справился с этим, и у меня все в порядке с идеями. Можно ли сделать так, чтобы компонент охватывал несколько параллельных групп?