3

Swingアプリケーションでのユーザー入力用のsとsJPanelを含むsがいくつかあります。JLabelJTextField

NetBeans GUI Builderによって生成されたコードを手動で編集していますが、それでも同様のレイアウトを維持したいと考えています。

を使用して開始しましたGridLayout。を微調整hgapして自分JLabelのsとJTextFieldsを適切なサイズにすることができますが、これはすべてのJPanelsに対して個別に行う必要があります。

LayoutManagerコンポーネントのフォントサイズに基づいてテキストコンポーネントの正しい高さを計算し、テキストコンポーネントの間および/または周囲にスペースを含むコンポーネントを埋める標準はありますか?

編集:

リクエストに応じて、これが私がやろうとしていることを示すためのSSCCEです

GridLayoutSSCCE:

package gridlayoutsscce;

import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class GridLayoutSSCCE {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                JFrame f = new JFrame("Grid Layout SSCCE");
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                f.add(new GridLayoutSSCCEPanel());
                f.pack();
                f.setVisible(true);
            }
        });
    }
}

GridLayoutSSCCEPanel:

package gridlayoutsscce;

import java.awt.GridLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

class GridLayoutSSCCEPanel extends JPanel {
    public GridLayoutSSCCEPanel() {
        this.setLayout(new GridLayout(2, 2));
        this.add(new JLabel("Label 1:"));
        this.add(new JTextField());

        this.add(new JLabel("Label 2:"));
        this.add(new JTextField());
    }
}

私が最初にプログラムを実行したとき、これはうまく見えます。ただし、ウィンドウのサイズを変更すると、テキストフィールドが伸びて、それぞれがウィンドウの高さの半分を占めるようになります。ウィンドウのサイズを変更したときの高さと同じ高さを維持したいと思います。

4

2 に答える 2

4

GridBagLayout柔軟性は高いですが、最も複雑なものの1つと見なされます。

きっと言及されるでしょうが、私はそれを個人的に使用したことはなく、 JGoodiesMigLayoutについても言及する必要がありますが、繰り返しになりますが、私はそれを使用したことがありません。FormLayout

于 2012-09-16T23:57:57.853 に答える
1

友達は友達にGridBagLayoutを使わせません(私たちはみんなここにいる友達ですよね?)

JGoodiesフォームのレイアウトを使用して、これはSSCCEに実行させたいことを実行します。

class MyFormLayoutSSCCEPanel extends JPanel {
  public MyFormLayoutSSCCEPanel() {
    FormLayout layout = new FormLayout(
      "pref, pref:grow",   // columns
      "pref, pref");       // rows
    this.setLayout(layout);

    CellConstraints cc = new CellConstraints();
    this.add(new JLabel("Label 1:"), cc.xy(1,1));
    this.add(new JTextField(), cc.xy(2, 1));

    this.add(new JLabel("Label 2:"), cc.xy(1, 2));
    this.add(new JTextField(), cc.xy(2, 2));
  }
}

(ただし、これは元のSSCCEの動作を正確に再現しないことに注意してください。テキストフィールドを水平方向に拡大して、使用可能なすべてのスペースを消費するように指示しました。)

ただし、まだJGoodiesに交換することはお勧めしません。JGoodiesのformlayoutが節約できるような作業を適切に評価する前に、デフォルトのSwingレイアウトマネージャーで少なくとも2週間の時間の無駄なフラストレーションが必要です。

于 2012-09-17T13:51:50.370 に答える