0

MigLayout で奇妙な動作が発生します。私の問題を反映した SSCCE があります。基本的に、上の 2 つのパネルの間にギャップがあります (ギャップは左側のセルに属します)。他のすべては私が望む通りです。ギャップが発生するのは、JFrameが大きくサイズ変更され、十分な大きさの場合のみです。

SSCCE

左側のパネル ( という名前Measurement) は固定幅にする必要がありますが、中央のパネル ( という名前Config) は固定幅でpushx, growxあるため、その行の他の 2 つのコンポーネントによって残されたすべてのスペースを埋める必要があります。しかし、左パネルのセルが残りのスペースを盗んでいるようです。

そのスペースを削除するにはどうすればよいですか (構成パネルが測定パネルに直接接触し、測定パネルの幅が正確に 500 ピクセルになるように)。

MigLayout 4.0 を使用しています。

import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;

import net.miginfocom.swing.MigLayout;

public class Main {
    private static JButton minimizeButton;
    private static JPanel configPanel, plotPanel, measPanel;

    public static void main(final String[] args) {
        final JFrame frame = new JFrame("test");

        frame.setLayout(new MigLayout("insets 10, hidemode 3, debug", "", ""));

        frame.add(getMeasPanel(), "w 500!");
        frame.add(getConfigPanel(), "left, grow, pushx");
        frame.add(getMinimizeButton(), "right, top, wrap");
        frame.add(getPlotPanel(), "spanx 3, grow, push, wrap");

        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }

    private static JPanel getConfigPanel() {
        if (configPanel == null) {
            configPanel = new JPanel(new MigLayout("insets 10"));
            configPanel.add(new JLabel("test123"), "spanx 2, wrap");
            configPanel.add(new JLabel("test123"), "h 40!");
            configPanel.add(new JLabel("test123"), "right, wrap");
            configPanel.setBorder(BorderFactory.createTitledBorder(null,
                    "Plot", TitledBorder.LEFT, TitledBorder.TOP, new Font(
                            "null", Font.BOLD, 12), Color.BLUE));
        }
        return configPanel;
    }

    private static JButton getMinimizeButton() {
        if (minimizeButton == null) {
            minimizeButton = new JButton("_");
            minimizeButton.setFocusPainted(false);
            minimizeButton.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent arg0) {
                    toggleConfigMinimize();
                }
            });
        }
        return minimizeButton;
    }

    private static JPanel getPlotPanel() {
        if (plotPanel == null) {
            plotPanel = new JPanel();
            plotPanel.setBorder(BorderFactory.createTitledBorder(null,
                    "Plot Config", TitledBorder.LEFT, TitledBorder.TOP,
                    new Font("null", Font.BOLD, 12), Color.BLUE));
        }
        return plotPanel;
    }

    private static JPanel getMeasPanel() {
        if (measPanel == null) {
            measPanel = new JPanel(new MigLayout("insets 10"));
            measPanel.add(new JLabel("test123"), "spanx 2, wrap");
            measPanel.add(new JLabel("test123"), "h 40!");
            measPanel.add(new JLabel("test123"), "right, wrap");
            measPanel.add(new JLabel("test123"), "spanx 2, wrap");
            measPanel.add(new JLabel("test123"), "spanx 2, wrap");
            measPanel.setBorder(BorderFactory.createTitledBorder(null,
                    "Measurement", TitledBorder.LEFT, TitledBorder.TOP,
                    new Font("null", Font.BOLD, 12), Color.BLUE));
        }
        return measPanel;
    }

    private static boolean showConfig = true;

    protected static void toggleConfigMinimize() {
        showConfig = !showConfig;
        getMeasPanel().setVisible(showConfig);
        getConfigPanel().setVisible(showConfig);
    }
}
4

2 に答える 2