私はJavaプログラムを書いています(コンパイル可能な最小限の例を以下に示します)。いくつかの要素を並べてユーザーインターフェイスをきれいにしようとしています。これを実行すると、それがわかります。同じサイズd_ip
にd_pword
できれば、見栄えがよくなります。また、ウィンドウのサイズを変更しても、動的に同じサイズのままにしたいと考えています。
GroupLayout には、linkSize()
無関係なオブジェクトのサイズをリンクできるメソッドがあります。これは、ボタンとラベルでうまく機能します。しかし、JTextField の場合、これは大惨事です。そのうちの 1 つの最小サイズを大きなサイズに設定しても、サイズを 0 に設定する必要があります。
GroupLayout.DEFAULT_SIZE
また、GroupLayout に、水平方向の最小サイズと優先サイズが有効か無効かを伝えるなどのことも試しましGroupLayout.PREFERRED_SIZE
た。JTextField を強制的に linkSize で適切に動作させる方法があるかどうか、誰か教えてもらえますか?
linkSize をオンにするには、コメントでラベル付けされた行があり、コメントを外す必要があることに注意してください。これを行うと、JTextField の幅が台無しになります。また、d_username
リンクされたオブジェクトのリストに追加してみてください。ここで、ユーザー名/パスワードの行をウィンドウの幅に合わせて水平方向に配置するという「緊張」があったとしても、フィールドのサイズはゼロになり、サイズは変更されません。
ありがとう!
package textfield;
import java.awt.Container;
import java.awt.Dimension;
import javax.swing.ButtonGroup;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
public class TextField extends JFrame {
JTextField d_mount, d_ip, d_share, d_username, d_pword;
JRadioButton nfs, smb;
JButton save, revert;
TextField() {
Container pane = this.getContentPane();
JLabel lmount = new JLabel("Mount Point:");
JLabel ltype = new JLabel("Share Type:");
JLabel lip = new JLabel("IP Address:");
JLabel lshare = new JLabel("Remote Share:");
JLabel lusername = new JLabel("Username:");
JLabel lpassword = new JLabel("Password:");
d_mount = new JTextField();
nfs = new JRadioButton("NFS");
smb = new JRadioButton("SMB");
ButtonGroup group = new ButtonGroup();
group.add(nfs);
group.add(smb);
d_ip = new JTextField();
d_share = new JTextField();
d_username = new JTextField();
d_pword = new JTextField();
d_ip.setMinimumSize(new Dimension(200, 0));
save = new JButton("Save");
revert = new JButton("Revert");
GroupLayout layout = new GroupLayout(pane);
pane.setLayout(layout);
layout.setVerticalGroup(
layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(lmount)
.addComponent(d_mount)
)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(ltype)
.addComponent(nfs)
.addComponent(smb)
// )
//.addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(lip)
.addComponent(d_ip)
)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(lshare)
.addComponent(d_share)
)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE, true)
.addComponent(lusername)
.addComponent(d_username)
.addComponent(lpassword)
.addComponent(d_pword)
)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(revert)
.addComponent(save)
)
);
layout.setHorizontalGroup(
layout.createParallelGroup()
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING)
.addComponent(lmount)
.addComponent(ltype)
.addComponent(lshare)
.addComponent(lusername)
)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(d_mount)
.addGroup(layout.createSequentialGroup()
.addComponent(nfs)
.addComponent(smb)
.addGap(20, 20, Integer.MAX_VALUE)
.addComponent(lip)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(d_ip, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
)
.addComponent(d_share)
.addGroup(layout.createSequentialGroup()
.addComponent(d_username, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(lpassword)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(d_pword, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
)
)
)
.addGroup(layout.createSequentialGroup()
.addGap(0, 0, Integer.MAX_VALUE)
.addComponent(revert)
.addComponent(save)
)
);
// ****** ADD THIS LINE BACK IN ******
//layout.linkSize(SwingConstants.HORIZONTAL, d_pword, d_ip);
pack();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
}
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new TextField().setVisible(true);
}
});
}
}