0

コンポーネントを持たず、Graphics2D 画像だけを持つ 3 つの JPanel があります。写真の配置は問題ありませんでした。しかし、それらを JFrame で必要な順序に並べようとすると問題が発生します。これは私が使用しているコードです:

    setLayout(new BorderLayout());
    JPanel panel = new JPanel();
    BoxLayout bxLayout=new BoxLayout(panel,BoxLayout.Y_AXIS);

    setLayout(new BorderLayout());
    CaptionPanel cPanel= new CaptionPanel("Евгений",new Font("Serif",Font.BOLD,20),20,0);
    cPanel.setPreferredSize(new Dimension(220,70));

    BFieldPanel bField = new BFieldPanel(20,20);
    bField.setPreferredSize(new Dimension(220,220));

    BStatePanel bsPanel=new BStatePanel(20,0);
    bsPanel.setPreferredSize(new Dimension(220,70));

    panel.add(cPanel);
    panel.add(bField);
    panel.add(bsPanel);

    add(panel,BorderLayout.CENTER);

レイアウトマネージャーにパネルのサイズを考慮させる効率的な方法が必要です。私が見た setPreferredSize() メソッドは、フォーム パネルの pisitioning 計算であまりにも優先度が低すぎます。 あなたは私が望む結果を見つけることができます

4

1 に答える 1

1

あなたはこれを読むことから恩恵を受けるかもしれません. あなたが抱えている問題を説明していないため、あなたの質問が何であるかは明確ではありません。何が機能していないか、何がやりたいことを妨げているかではなく、やりたいことを説明しただけです。

BorderLayout を使用してコンポーネント (この場合は CaptionPanel、BFieldPanel、および BStatePanel) を垂直方向に整列させる方法の例を探していると思います。あなたの例にはコンポーネントがないので、この例はボーダーレイアウトの一般的な使用方法を示しています:

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

public class Main {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame f = new JFrame("Example");
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                f.getContentPane().add(getPanel());
                f.pack();
                f.setVisible(true);
            }
        });
    }

    private static JPanel getPanel() {
        JPanel panel = new JPanel(new BorderLayout());
        panel.add(new JLabel("Top"), BorderLayout.NORTH);
        panel.add(new JLabel("Center"), BorderLayout.CENTER);
        panel.add(new JLabel("Bottom"), BorderLayout.SOUTH);
        panel.setPreferredSize(new Dimension(400, 300));
        return panel;
    }
}
于 2013-11-09T18:47:08.263 に答える