2

Java を使用して mySQL データベースと対話するクライアント/サーバー アプリケーションを作成しようとしています。現時点では、アプリケーションの機能については心配していません。今気になっているのはレイアウトです。GUI の外観を何時間も構築しようとしてきましたが、結果はまちまちでした。GridBagLayout は非常に柔軟で、一般的に使用されている GUI であることを認識しています。これは私が使用してきたものです。列を表す複数の垂直ボックスと行を表す水平ボックスを作成してみましたが、うまくいきましたが、最終的には必要な結果が得られませんでした。

より具体的には、私の主な問題は、以下のコードで、「SQLコマンドを入力してください」列を左のテキストフィールドボックス列に並べようとすると、必要に応じて右に「浮かびません」ということです代わりに、その下にあるすべてのコンポーネントを移動し、配置を台無しにします。

私が間違っていること、および以下のような GUI を実現する方法について、誰かが私を導くのを手伝ってくれれば、非常にありがたいです。

これまでの私のJavaコード:

public class Methods extends JFrame{
    private final JTextField item1 = new JTextField(40); 
    private final JTextField item2 = new JTextField(40); 
    private final JTextField item3 = new JTextField(40); 
    private final JTextField item4 = new JTextField(40);
    private final JTextArea item5 = new JTextArea(6,30);
    private JLabel label = new JLabel("Enter Database Information"); 
    private JLabel label1 = new JLabel("JDBC Driver"); 
    private JLabel label2 = new JLabel("Database URL"); 
    private JLabel label3 = new JLabel("Username"); 
    private JLabel label4 = new JLabel("Password");
    private JLabel label5 = new JLabel("Enter a SQL Command"); 
    private JLabel label6 = new JLabel("No Connection Now");
    private JLabel label7 = new JLabel("SQL Execution Result");
    private final JButton button1 = new JButton("Connect"); 
    private final JButton button2 = new JButton("Execute SQL Command"); 
    private final JButton button3 = new JButton("Clear Command");
    private final JButton button4 = new JButton("Clear Results"); 
    private final JPanel jp;

    public Methods(){
        super("SQL Client GUI - MHZ");
        
        item1.setText("JDBC Driver");
        item2.setText("Datbase URL");
        item3.setText("Username");
        item4.setText("Password");
        
        //GUI Gridlayout Layout
        jp = new JPanel();
        jp.setLayout(new GridBagLayout()); 
        GridBagConstraints grid = new GridBagConstraints(); 
        grid.anchor = GridBagConstraints.BASELINE_TRAILING;
                        
        
        grid.gridx=0;
        grid.gridy=0;
        
        //column1
        jp.add(label1, grid);
        grid.gridy++;
        jp.add(label2, grid);
        grid.gridy++;
        jp.add(label3, grid);
        grid.gridy++;
        jp.add(label4, grid);
        
        grid.gridy=0;
        grid.gridx++;
        
        //col2
        jp.add(item1, grid);
        grid.gridy++;
        jp.add(item2, grid);
        grid.gridy++;
        jp.add(item3, grid);
        grid.gridy++;
        jp.add(item4, grid);
        
        grid.gridy=0;
        grid.gridx++;
        
        //col3
        jp.add(label5, grid);
        grid.gridy++;
        jp.add(item5, grid);
        grid.gridy++;
        
        grid.gridx=0;
        grid.gridy=4;
        jp.add(button1,grid);
        grid.gridx++;
        jp.add(button2, grid);
        grid.gridx++;
        jp.add(button3, grid);
        grid.gridx++;
        jp.add(button4, grid);
        
        add(jp);
    }
}

下の画像は、その本来の姿です。

4

1 に答える 1

2

ここで使用する必要があるものはほとんどありません:gridWidthとを使用します。gridHeightたとえば、次のようにします。

     grid.gridx = 0;
     grid.gridy = 0;
     add (button1, grid);

     grid.gridx = 1;
     grid.gridy = 0;
     add (button2, grid);

     grid.gridwidth = 2;

     grid.gridx = 0;
     grid.gridy = 1;
     add (button3, grid);

その場合、3 番目のボタンは最初の 2 つのボタンの下にあり、両方のサイズに適合します。その場合の数字 2 は、それが収まるボタンを示します。後で別のコンポーネントを追加する場合は、幅を 1 に戻す必要があることに注意してくださいgridHeight

コードで使用する場合は、textArea を 4 つの textField と同じ高さにすることから始めます。

もう 1 つのことは、最初のラベルを追加しなかったため、textFields が 1 行高すぎたことです。

于 2012-10-06T21:48:42.850 に答える