Here is the solution:
package com.zetcode;
import java.awt.Container;
import java.awt.EventQueue;
import javax.swing.GroupLayout;
import static javax.swing.GroupLayout.Alignment.CENTER;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JScrollPane;
public class GroupLayoutTags extends JFrame {
public GroupLayoutTags() {
initUI();
setTitle("Tags");
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private void initUI() {
Container pane = getContentPane();
GroupLayout gl = new GroupLayout(pane);
pane.setLayout(gl);
JLabel avLbl = new JLabel("Available");
JLabel tagsLbl = new JLabel("Tags");
JLabel selLbl = new JLabel("Selected");
JButton newBtn = new JButton("New");
JButton moveBtn = new JButton(">>");
JButton remBtn = new JButton("Remove");
JList leftList = new JList();
JScrollPane spleft = new JScrollPane(leftList);
JList rightList = new JList();
JScrollPane spright = new JScrollPane(rightList);
gl.setAutoCreateGaps(true);
gl.setAutoCreateContainerGaps(true);
gl.setHorizontalGroup(gl.createParallelGroup(CENTER)
.addComponent(tagsLbl)
.addGroup(gl.createSequentialGroup()
.addGroup(gl.createParallelGroup(CENTER)
.addComponent(avLbl)
.addComponent(spleft, 100, 200, Short.MAX_VALUE)
.addComponent(newBtn))
.addComponent(moveBtn)
.addGroup(gl.createParallelGroup(CENTER)
.addComponent(selLbl)
.addComponent(spright, 100, 200, Short.MAX_VALUE)
.addComponent(remBtn)))
);
gl.setVerticalGroup(gl.createSequentialGroup()
.addComponent(tagsLbl)
.addGroup(gl.createParallelGroup(CENTER)
.addGroup(gl.createSequentialGroup()
.addComponent(avLbl)
.addComponent(spleft, 100, 250, Short.MAX_VALUE)
.addComponent(newBtn))
.addComponent(moveBtn)
.addGroup(gl.createSequentialGroup()
.addComponent(selLbl)
.addComponent(spright, 100, 250, Short.MAX_VALUE)
.addComponent(remBtn)))
);
pack();
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
GroupLayoutTags ex = new GroupLayoutTags();
ex.setVisible(true);
}
});
}
}
If find MigLayout
manager easier to use than GroupLayout
.
However with some practice, GroupLayout
is also feasible.