2

私はボードゲームに取り組んでおり、ボードを西にドッキングされた正方形で、寸法が frameHeight x frameHeight であり、東にドッキングされたサイドパネルで残りを埋めるようにしたいと考えています。

基本的に:
West - frameHeight x frameHeight
East - leftWidth x frameHeight

 _________________
|          |      |
|          |      |
|  WEST    | EAST |
|          |      |
|          |      |
|__________|______|

現時点で MigLayout を使用すると、LARGE (西) の高さは 100% である必要があると言っていますが、幅が親の高さの 100% に等しく、残りの幅を SMALL (東) で埋める必要があると言う方法がわかりません。

これにアプローチするためのまともなアイデアを持っている人はいますか?

4

3 に答える 3

1
  1. (表示と非表示の機能を備えた)DockingPanel一部をカバーできる場合に使用するJFrame

    • GlassPane(すべてが でJComponentsなければならないことに注意してくださいlightweight。そうでない場合GlassPaneは後ろに移動します)

    • JLayer(Java6 ベースJXLayer)

  2. 最も快適なのは使用することですJSplitPane

于 2012-08-23T12:12:03.303 に答える
1

MiGLayout では、サイズの制約に参照を使用できませんが、制約を使用して行うことができますpos

add(panel, "id large, pos 0 0 container.h container.h");

これpanelにより、左端にドッキングされているように見え、高さ全体をカバーし、高さと同じ幅になります。

次に、残りのスペースを次のように埋めることができます。

add(otherPanel, "pos large.x2 0 container.w container.h");
于 2012-08-23T14:16:37.840 に答える
1

メソッドをオーバーライドして、getPreferredSize()親のサイズに基づいてパネルのサイズを計算できます。この時点では、パネル内のコンテンツのサイズを完全に無視していることに注意してください。それでも気にする場合は、 a のJScrollPane代わりに a を拡張することをお勧めしJPanelます。

import java.awt.*;
import javax.swing.*;

public class TempProject extends JPanel{

    enum Type{
        SQUARE,
        FILL
    };

    Type mytype;

    public TempProject(Type type){
        mytype = type;
        if(mytype == Type.SQUARE){
            setBackground(Color.orange);
        } else if(mytype == Type.FILL){
            setBackground(Color.blue);
        }
    }

    @Override
    public Dimension getPreferredSize(){
        Dimension result = getParent().getSize();
        if(mytype == Type.SQUARE){
            //Calculate square size
            result.width = result.height;

        } else if(mytype == Type.FILL){
            //Calculate fill size
            int tempWidth = result.width - result.height;
            if(tempWidth > 0){  // Ensure width stays greater than 0
                result.width = tempWidth;
            } else{
                result.width = 0;
            }
        }
        return result;
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                try {
                    JFrame f = new JFrame("Java Game");
                    f.setSize(700, 500);
                    f.setVisible(true);
                    f.setBackground(Color.GRAY);

                    Box contentPanel = Box.createHorizontalBox();
                    contentPanel.add(new TempProject(Type.SQUARE));
                    contentPanel.add(new TempProject(Type.FILL));
                    f.setContentPane(contentPanel);

                    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });

    }

}
于 2012-08-23T14:15:54.480 に答える