2016-08-25 11 views
-1

ここでこの問題についてたくさん読んでいます...しかし、私はこれを解決する方法を得ていないようです。 私が試したすべてのソリューションは機能していません。もう1つのGridBagLayoutアラインメント・バクー

しかし、最初から始めてみましょう: 私はSwingと私のインターフェイスを構築していて、モジュール化しようとしています。 左のメインメニューにクラス(JPanelを拡張)があります。 メニューはGridBagLayoutのいくつかのボタンでビルドされていません。

しかし、私はこのレイアウトをウィンドウ(パネル)の上部に合わせることができません。 Exampel:などパネルの上部にあるラベルは、以下のテキストフィールド、テキストフィールドの下にあるボタン、

私のコードを参照してください。

public class LeftMenu extends JPanel { 
    public LeftMenu(){ 

    GridBagLayout gbl_panel = new GridBagLayout(); 
    gbl_panel.columnWidths = new int[] { 86, 0 }; 
    gbl_panel.rowHeights = new int[] {32, 32, 32, 32, 32, 32, 32, 32, 32 }; 
    gbl_panel.columnWeights = new double[] { 0.0, Double.MIN_VALUE }; 
    gbl_panel.rowWeights = new double[] { 0.0, 0.0, 0.0, 0.0, 0.0 }; 
    setLayout(gbl_panel); 

    JLabel lblEnterTrunkId = new JLabel("Enter Trunk ID"); 
    GridBagConstraints gbc_lblEnterTrunkId = new GridBagConstraints(); 
    gbc_lblEnterTrunkId.fill = GridBagConstraints.HORIZONTAL; 
    gbc_lblEnterTrunkId.insets = new Insets(0, 0, 5, 0); 
    gbc_lblEnterTrunkId.gridx = 0; 
    gbc_lblEnterTrunkId.gridy = 0; 
    gbc_lblEnterTrunkId.anchor = GridBagConstraints.NORTH; 
    add(lblEnterTrunkId, gbc_lblEnterTrunkId); 
    } 
} 

テキストフィールドと後ろに、以下のいくつかのボタンがありますラベル。 しかし、私はこれらは関係ないと思う... 彼らはほとんどラベルのように見える(ラベルではない...私はあなたが私を得ると思います...)

私が読んだすべてのガイドすべてがGridBagConstraintのアンカーを指しています。それは....しかし、働いていない。 パネルの真ん中には素晴らしい場所があります。

それは問題でない場合

:イストをSplitPaneのLeftComponentとして使用 パネル:

public LeftMenu leftpanel = new LeftMenu(); 

splitPaneTrunks.setLeftComponent(leftpanel); 

あなたの助けを楽しみにしています。

ここは私のサイドメニューの写真です...水平に中央に配置されています。そうではないはずです。代わりにGridBagLayoutを使用しての

http://i.stack.imgur.com/NsBg2.png

+0

1)より良い助け早くするためには、[MCVE]を投稿したり、[ショート、自炊、正しい例](http://www.sscce.org/)。 2)ASCIIアート、またはGUIの*意図された*レイアウトの簡単な図を最小サイズで提供し、サイズ変更可能な場合は幅と高さを増やします。 –

+0

swingxライブラリでHorizo​​ntalLayoutを表示 –

答えて

1

そうのように、あなたは、レイアウトBorderLayoutJPanelを使用してラップを作ることができる:ここ

setLayout(new BorderLayout()); 

    JPanel gridBagWrap = new JPanel(); 

    GridBagLayout gbl_panel = new GridBagLayout(); 
    gbl_panel.columnWidths = new int[] { 86, 0 }; 
    gbl_panel.rowHeights = new int[] {32, 32, 32, 32, 32, 32, 32, 32, 32 }; 
    gbl_panel.columnWeights = new double[] { 0.0, Double.MIN_VALUE }; 
    gbl_panel.rowWeights = new double[] { 0.0, 0.0, 0.0, 0.0, 0.0 }; 
    gridBagWrap.setLayout(gbl_panel); 

    JLabel lblEnterTrunkId = new JLabel("Enter Trunk ID"); 
    GridBagConstraints gbc_lblEnterTrunkId = new GridBagConstraints(); 
    gbc_lblEnterTrunkId.fill = GridBagConstraints.HORIZONTAL; 
    gbc_lblEnterTrunkId.insets = new Insets(0, 0, 5, 0); 
    gbc_lblEnterTrunkId.gridx = 0; 
    gbc_lblEnterTrunkId.gridy = 0; 
    gbc_lblEnterTrunkId.anchor = GridBagConstraints.NORTH; 
    gridBagWrap.add(lblEnterTrunkId, gbc_lblEnterTrunkId); 

    add(gridBagWrap, BorderLayout.NORTH); 
+0

答えをいただきありがとうございます...私は私が必要とするものを少し間違って記述したようです...私のテキストを編集しました。これにつきましては申し訳ございません。私は、ページの上部にあるオブジェクトを整列させたくありません。グリッドバッグ全体が上部に揃うようにしてください。グリッドバッグ内のすべての要素は、必要なだけ正確に配置されますが、最初のオブジェクトはJPanelの上部にありません。 – Marcus

+0

@Marcusスクリーンショットを投稿できますか? – nyxaria

+0

ちょうどそれは...気づいていなかったので、ここに簡単に追加することができました。 – Marcus

1

は私のサイドメニューの写真です...水平にセンタリングされる。そうではないはずです。

コンポーネントを上から表示したい場合は、垂直にセンタリングしないでください。

いずれにしても、私の問題はあなたのweightyという制約だと思います。少なくとも1つのコンポーネントではゼロ以外の値を指定する必要があります。そうでなければ、コンポーネントは垂直方向にセンタリングされます。

How to Use GridBagLayoutのSwingチュートリアルのセクションを読んでください。これをより詳細に説明するweightx/weighty制約に関するセクションがあります。

0

あなたがマネージャーGridBagLayoutで紛失したことは驚きません。実際には最も一般的に言及されている機能の1つです。 GridBagLayoutは90年代から来ており、ポータブルではないコンポーネント間のピクセル固定のギャップを使用しています。このマネージャーでは、レイアウトの各セルを退屈に定義する必要があります。人々が混乱するのも不思議ではありません。

MigLayoutをお勧めします。それが使用できない場合は、GroupLayoutです。ここで

MigLayoutとソリューションです:

package com.zetcode; 

import javax.swing.BorderFactory; 
import javax.swing.JButton; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JTextArea; 
import javax.swing.JTextField; 
import javax.swing.SwingUtilities; 
import net.miginfocom.swing.MigLayout; 

/* 
Demonstration of MigLayout manager. 
Author: Jan Bodnar 
Website: zetcode.com 
*/ 
public class MigLayoutTrunkEx extends JFrame { 

    public MigLayoutTrunkEx() { 

     initUI(); 
    } 

    private void initUI() { 

     JLabel lbl = new JLabel("Enter Trunk ID"); 
     JTextField textField = new JTextField(10); 

     JButton btn1 = new JButton("A"); 
     JButton btn2 = new JButton("B"); 
     JButton btn3 = new JButton("C"); 
     JButton btn4 = new JButton("D"); 
     JButton btn5 = new JButton("E"); 

     JTextArea area = new JTextArea(20, 25); 
     area.setBorder(BorderFactory.createEtchedBorder()); 

     JLabel statusBar = new JLabel("Ready"); 

     createLayout(lbl, textField, btn1, btn2, btn3, 
       btn4, btn5, area, statusBar); 

     setTitle("MigLayout example"); 
     setLocationRelativeTo(null); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

    private void createLayout(JComponent... arg) { 

     setLayout(new MigLayout("", "[align center]", "")); 

     add(arg[0], "split 7, flowy"); 
     add(arg[1]); 
     add(arg[2]); 
     add(arg[3]); 
     add(arg[4]); 
     add(arg[5]); 
     add(arg[6]); 
     add(arg[7], "grow, push, wrap"); 
     add(arg[8], "align left, growx, spanx"); 

     pack(); 
    } 

    public static void main(String[] args) { 

     SwingUtilities.invokeLater(() -> { 
      MigLayoutTrunkEx ex = new MigLayoutTrunkEx(); 
      ex.setVisible(true); 
     }); 
    } 
} 

あなたがMigLayoutを知って得ればそれは、簡単です。 10分または15分の作業。

スクリーンショット:

MigLayout example screenshot

関連する問題