2016-10-30 12 views
-5

私は学校の割り当てにすべてのGUIを手作業で記述する必要があります。私はJavaで作業していて、GridBagLayoutを使用しています。私は、同じGridBagConstraintインスタンスを再利用するのではなく、各コンポーネントが独自のGridBagConstraintインスタンスを持つようにすることをお勧めします。したがって、各コンポーネントが独自のものを取得し、それぞれのコンポーネントの塗りつぶし、位置、およびインセットを指定すると、GUI用のコード行だけが表示されます。コード組織標準

この特定の割り当て私はBorderLayoutとその中に座る2つの他のペインにメインペインを持っています。 1つは出力情報のための表示領域である別のBorderLayoutであり、もう1つはユーザが複数のファイルを選択して入力に使用するためのラベル、テキストフィールド、ボタンです。私はそれを分解し、各ペインのすべてのコードを独自のJComponentインスタンスに配置しました(正しい用語であるかどうかはわかりません)。だから、コードは次のようになります。

protected JComponent inputPaneComponent() { 
    all code for the inputPane goes here 
} 

しかし、私は、各コンポーネントに対して複数ののGridBagConstraintsと仕様を用いて、上記のようなコードの長いグループにつながります。私は各コンポーネントの間に空の行を置いて分割しなければならないかもしれません。それとも、長い行のスタック?

これはまだすべてのコーディングを完了していないサンプルです。このような何か:

protected JComponent inputPaneComponent() { 
    JPanel inputPane = new JPanel(); 
    inputPane.setLayout(new GridBagLayout()); 
    inputPane.setBorder(BorderFactory.createTitledBorder("Input Files:")); 
    GridBagConstraints c0 = new GridBagConstraints(); 
    c0.fill = GridBagConstraints.HORIZONTAL; 
    c0.gridx = 0; 
    c0.gridy = 0; 
    c0.insets = new Insets(10, 10, 0, 0); 
    inputPane.add(nameLabel, c0); 
    GridBagConstraints c1 = new GridBagConstraints(); 
    c1.fill = GridBagConstraints.HORIZONTAL; 
    c1.gridx = 1; 
    c1.gridy = 0; 
    c1.insets = new Insets(10, 10, 0, 0); 
    inputPane.add(nameFileTextField, c1); 
    GridBagConstraints c2 = new GridBagConstraints(); 
    c2.fill = GridBagConstraints.HORIZONTAL; 
    c2.gridx = 2; 
    c2.gridy = 0; 
    c2.insets = new Insets(10, 10, 0, 0); 
    inputPane.add(nameFileButton, c2); 
    return inputPane; 
} 

またはこの:

protected JComponent inputPaneComponent() { 
    // Set title, layout, and exit condition. 
    JPanel inputPane = new JPanel(); 
    inputPane.setLayout(new GridBagLayout()); 
    inputPane.setBorder(BorderFactory.createTitledBorder("Input Files:")); 

    // Create and configure name label. 
    JLabel nameLabel = new JLabel("Names File:"); 
    GridBagConstraints c0 = new GridBagConstraints(); 
    c0.fill = GridBagConstraints.HORIZONTAL; 
    c0.gridx = 0; 
    c0.gridy = 0; 
    c0.insets = new Insets(10, 10, 0, 0); 
    inputPane.add(nameLabel, c0); 

    // Create and configure name file textfield. 
    JTextField nameFileTextField = new JTextField(60); 
    GridBagConstraints c1 = new GridBagConstraints(); 
    c1.fill = GridBagConstraints.HORIZONTAL; 
    c1.gridx = 1; 
    c1.gridy = 0; 
    c1.insets = new Insets(10, 10, 0, 0); 
    inputPane.add(nameFileTextField, c1); 

    // Create and configure name file button. 
    JButton nameFileButton = new JButton("Browse"); 
    GridBagConstraints c2 = new GridBagConstraints(); 
    c2.fill = GridBagConstraints.HORIZONTAL; 
    c2.gridx = 2; 
    c2.gridy = 0; 
    c2.insets = new Insets(10, 10, 0, 0); 
    inputPane.add(nameFileButton, c2); 
    return inputPane; 
} 

読みやすい私にように私は、後者を好むが、それは長さに追加しないと私は経験していないんだと標準が何であるか知りたい

ご協力ありがとうございます。私はこのフォーラムのルールの中にいたいと思います。これは私の最初の投稿です。

一般的に、長い方法は、彼らは、保守/簡単にサポート可能ではありませんので、あなたができるように、意味のある名前を持つ小さな方法にはさらに、あなたの長い方法をrefactorする必要があるため、マット

+0

最後に、それはあなたのコードであり、機能は最も重要な部分です。しかし、あなたの質問は意見に基づいていますので、[トピックとみなされるもの](http://stackoverflow.com/help/on-topic)をお読みください。 –

+0

読みやすく、わかりやすいメンテナンス性が向上し、常に良好です。あなたが示した2番目のスニペットは最初のスニペットよりはるかに優れています。もうひとつの良い選択肢は、すべてのGridBagConstraints関連のコードを独自のメソッドに入れることです。おそらく、 'private void addToPanel(JPanelパネル、JComponent item、int gridx、int gridy)のようなシグネチャを持つでしょうか。 –

答えて

-1

は、私はあなたのコードをリファクタリングすることをお勧めいたしますコメントは避け、メソッド名は自明になり、読みやすく/理解しやすくなります。

あなたは、私は以下のように、次のコードの一部をリファクタリングしている下記の方法で参照することができます。

private GridBagConstraints populateNameLabel(JLabel nameLabel) { 
     //populate the data here and return 
    } 

    private GridBagConstraints populateTextField(JTextField nameFileTextField) { 
     //populate the data here and return 
    } 

    private GridBagConstraints populateFileButton(JButton nameFileButton) { 
     //populate the data here and return 
    } 

あなたは、コードをよりサポート可能になるように、あなたのオリジナルの方法でこれらのメソッドを利用する必要があるが/読める。

+0

入力いただきありがとうございます。 – Matt

+0

@Matt私の答えが役に立ったらそれを受け入れることができますか? – developer

1

まず...いいえ、離れ低レベルのレイアウトコードを生成することをデザイナーツールを使用してから標準的な、または事実上の標準は、存在しません。 (あなたはどちらを行うにはないと言われている。)

をしかし、あなたのタスクは少し苦痛が少ないようにする可能性の方法があります。

  • それはGridBagLayoutに組み込まれたときGridBagConstraintオブジェクトが複製されます。つまり、同じGridBagConstraintオブジェクトを再利用して、増分変更を加えることができます。

  • 構築をより簡潔にするように設計されたGridBagConstraintオブジェクト用の「ビルダー」を提供するサードパーティのライブラリがあります。

よりいくつかのリードのために、このQ & Aを読む:


1 - デザイナーのツールとトラップは、あなたが "固定" してしまうことがあります特定のツールを使用します。ツールベンダーがサポートを停止するまで、それは問題ありません。もう1つの問題は、製品を配布/販売するためにランタイムライセンスの無償の料金を支払う必要があることに気付く可能性があることです。 (私は1つが素晴らしいプロジェクトを殺すことを見て死んだ!)

+0

良い答えですが、私はそのリンクのファンではありません。 GridBagLayoutの使い方についての良いアドバイスではなく、ほとんどがGridBagLayoutの代替案で構成されています。 – VGR