Java プログラミングに 4 年近く携わった後、自分で GUI クラスの書き方を学ぶことにしました。これまでずっと NetBeans GUI エディタを使用してきたからです (特に誇りに思っているわけではありませんが、かなりうまく機能しているので、コンポーネントについて心配する必要はありません)。レイアウト)。
問題は、 How to Use GroupLayoutチュートリアルに従って、非常に強力なこのレイアウト マネージャーについて学習していることです。今、私は自分で小さな例を作成し、Netbeans GUI エディターで同じことを試みましたが、両方のコードにいくつかの違いがあることがわかりました。何か不足しているのか、NetBeans が GroupLayout 定義に役に立たないコードを追加しているだけなのかを知りたいです。 .
これが私の目標です:
これは私のSSCCEです:
public static void main(String[] args) {
JLabel label = new JLabel("This is a test");
label.setFont(new Font("Segoe UI Semibold", Font.BOLD | Font.ITALIC, 24));
JSeparator separator = new JSeparator(JSeparator.HORIZONTAL);
DefaultListModel model = new DefaultListModel();
model.addElement("Apple");
model.addElement("Orange");
model.addElement("Kiwi");
model.addElement("Watermelon");
JList list = new JList(model);
list.setPreferredSize(new Dimension(400, 300));
JScrollPane scrollPane = new JScrollPane();
scrollPane.setViewportView(list);
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
Container contentPane = frame.getContentPane();
GroupLayout layout = new GroupLayout(contentPane);
layout.setAutoCreateContainerGaps(true);
contentPane.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(label, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE)
.addComponent(separator)
.addComponent(scrollPane)
);
layout.setVerticalGroup(
layout.createSequentialGroup()
.addComponent(label)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(separator, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(scrollPane, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE)
);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
ご覧のとおり、並列グループを水平グループとして定義し、順次グループを垂直グループとして定義しただけです。しかし、Netbeans は次のコードを自動生成します。
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(label, javax.swing.GroupLayout.DEFAULT_SIZE, 300, Short.MAX_VALUE)
.addComponent(separator)
.addComponent(scrollPane))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(label)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(separator, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(scrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 224, Short.MAX_VALUE)
.addContainerGap())
);
ご覧のとおり、グループ構造は私のものより少し複雑です。私が間違っているのか、それとも Netbeans が必要以上のグループを不必要に追加しているのかを知りたいだけです。