4

空き時間にJavaバージョンのMonopolyを構築していて、Swingのレイアウトなどを理解するのに問題があります。

ボード上の私のスペースのそれぞれは本質的にカスタムJButtonであり、私はそれらをフレームの端の周りに配置しようとしています(独占ボード自体のように)。レイアウトシステムがどのように機能するかについての有用な説明が見つからないようで、問題があります。

フレームの端にボタンを配置する方法の例を教えてください。別のレイアウトを使用する必要がありますか?

4

4 に答える 4

3

これは、で最適に機能するのに役立つようBorderLayoutです。JPanelすべてのを含む4つのを作成することをお勧めしJButtonます。

次に、、、、、およびにJPanelsを追加します。BorderLayout.NorthSouthEastWest

それはおそらくボタンをレイアウトする最も簡単な方法のように思えます。

ここは、を使い始めるのに最適な場所BorderLayoutです。

私はあなたがこれをレイアウトし始めるのを助けるかもしれないいくつかのコードを一緒に投げました。 コンパイルされていません。

int boardWidth;
int boardHeight;
int boardSquareHeight;
int boardSqusreWidth;
JPanel north = new JPanel();
JPanel south = new JPanel();
Dimension northSouthD = new Dimension(boardWidth, boardSquareHeight);
north.setPreferedSize(northSouthD);
south.setPreferedSize(northSouthD);
JPanel east = new JPanel();
JPanel west = new JPanel();
Dimension eastWestD = new Dimension(boardSquareHeight, boardHeight - 2 * boardSquaareWidth);
east.setPreferedSize(easWestD);
west.setPreferedSize(easWestD);
// add all of the buttons to the appropriate JPanel
parentPanel.setLayoutManager(new BorderLayout());
parentPanel.add(north, BorderLayour.NORTH);
...
于 2010-06-14T15:55:57.417 に答える
1

これはすでに回答済みですが、GridLayoutがどのように機能するかを確認する価値があると感じました。まず、http://java.sun.com/docs/books/tutorial/uiswing/layout/gridbag.htmlhttp://www.cs.ubc.ca/local/computing/software/jdk-1.5.0/をオフにします。 docs / api / java / awt / GridBagConstraints.htmlは、長くて不可解な方法の署名を解読するのに役立ちます。

この独占ボードの例には、3つの主要な部分があります。レイアウトのセットアップ、JPanelsとしての大きなミドルピースの追加、およびJPanelsとしての外側の正方形の追加があります。

public class GridBagLayoutExample extends JFrame {

public static void main(String[] args) {
    new GridBagLayoutExample().setVisible(true);
}

public GridBagLayoutExample() {

    try {
        //Setup the Layout
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        GridBagLayout thisLayout = new GridBagLayout();
        thisLayout.rowWeights = new double[] { 0.2, 0.1, 0.1, 0.1, 0.1,
                0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.2 };
        thisLayout.columnWeights = new double[] { 0.2, 0.1, 0.1, 0.1, 0.1,
                0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.2 };
        getContentPane().setLayout(thisLayout);

        //Default Grid values
        int gridX = 0;
        int gridY = 0;
        //Add Panels for Each of the four sides
        for (int j = 0; j < 4; j++) {
            for (int i = 0; i < 13; i++) {
                JPanel tempPanel = new JPanel();
                switch(j)
                {
                case 0://Top Spaces
                    gridX = i;
                    gridY = 0;
                    break;
                case 1://Left Spaces
                    gridX = 0;
                    gridY = i;
                    break;
                case 2://Right Spaces
                    gridX = 12;
                    gridY = i;
                    break;
                case 3://Bottom Spaces
                    gridX = i;
                    gridY = 12;
                    break;
                }
                getContentPane().add(tempPanel,
                        new GridBagConstraints(gridX,// XGridSpot
                                gridY,// YGridSpot
                                1,// XGridSpaces
                                1,// YGridSpaces
                                0.0, 0.0, GridBagConstraints.CENTER,
                                GridBagConstraints.BOTH,//Fill
                                new Insets(0, 0, 0, 0), 0, 0));
                tempPanel.setBorder(BorderFactory
                        .createLineBorder(Color.BLACK));

            }
        }

        {// Main Inner Area Notice Starts at (1,1) and takes up 11x11
            JPanel innerPanel = new JPanel();
            getContentPane().add(
                    innerPanel,
                    new GridBagConstraints(1,
                            1,
                            11,
                            11,
                            0.0, 0.0,
                            GridBagConstraints.CENTER,
                            GridBagConstraints.BOTH,
                            new Insets(0, 0, 0, 0), 0, 0));
        }
        pack();
        setSize(260, 260);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}

ここから、パネルを保持するための構造を追加すると、各パネルにボタンなどを追加できます。パネルの代わりにボタンも機能します。これは正しいインポートでコンパイルされるはずなので、コンパイルして試してみてください。

于 2010-06-16T00:26:55.217 に答える
0

GridLayout「内部」セルを空のままにすると、標準でうまくいく可能性があります。

于 2010-06-14T15:46:58.063 に答える
0

おそらく、NetBeansのようなものでレイアウトを設計し、自動生成されたコード(作成した設計から間隔を生成します)を使用して独自のボードをレイアウトし、自動生成されたコードをコピーして、カスタムボタンに置​​き換えることができます。プレースホルダーとして使用した要素。

それはあなたがスイングにそれを理解させようとするのではなく、相対的な間隔に基づいてあなたが望む場所に物を正確に配置することを可能にするでしょう。

于 2010-06-14T16:05:08.307 に答える