0

私はJavaプログラムを書いています(コンパイル可能な最小限の例を以下に示します)。いくつかの要素を並べてユーザーインターフェイスをきれいにしようとしています。これを実行すると、それがわかります。同じサイズd_ipd_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);
            }
        });
    }
}
4

2 に答える 2

3

当面の解決策は、列のサイズを提案することです。つまり。

d_pword = new JTextField(15);

ノート:

  • これらの 2 つのフィールドを揃えたときに GUI が最もよく見えることに同意しません。それらの間には論理的なつながりがないため、サイズをリンクすることは無関係で誤解を招くように見えます.
  • d_pwordフィールドはJPasswordField.
于 2012-06-04T01:58:14.537 に答える
0

根本的な問題は、2つのオブジェクトをlinkSizeすると、どちらも本質的にサイズ変更できなくなることである可能性があります。

それは、この本が言っていることが真実である場合です:

http://books.google.com/books?id=kELcexu0pAcC&pg=PA67&lpg=PA67&dq=grouplayout+linksize+resIzable&source=bl&ots=Syy_LnNd4W&sig=cLGV96RAJeYEeV2ZDt_bmeBZqCM&hl=en&sa=X&ei=bdDMT9mMJMms2gW8m6z1DA&ved=0CFMQ6AEwAw#v=onepage&q=grouplayout%20linksize%20resIzable&f= false

于 2012-06-04T15:15:24.103 に答える