3

Mig レイアウトに問題があります。過去に絶対レイアウトを使用していた JFrame のメイン JPanel の再作成を開始しました。最初はすべてうまくいきました (cfr 2 番目の画像)。コンソール パネル (タブ パネルを備えたボックスの一部) は適切に配置されていましたが、依然として完全なレイアウトでした。個々の JPanels のレイアウトを Mig レイアウトに変換し始めたとき、最初の画像のように見えました (左揃えではありません)。同じ結果は、絶対レイアウトを Mig レイアウトに変更した他の JPanel にも当てはまります。

http://i.stack.imgur.com/97Yop.png [悪い] http://i.stack.imgur.com/KTLGK.png [良い]

http://i.stack.imgur.com/p3qWZ.png [1000個のアラインメントをデバッグ]

これが私のフレームクラスの縮小版です。極力減らしたので構造がおかしくなりました。MigLayout を使用したデフォルトの JPanel でも問題が発生するため、ControlConsolePanel も削除しました。

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.border.Border;
import javax.swing.border.TitledBorder;
import net.miginfocom.swing.MigLayout;

public class MainControll extends JFrame{

    private static final long serialVersionUID = 14L;
private JPanel configurationPane;
private JPanel feedbackPane;
private JTextArea feedback;
private JTabbedPane plotTabPane;
private JPanel consolePane;

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run(){
            try {
                MainControll frame = new MainControll();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

public MainControll(){
    setTitle("test");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 860, 660);
    initiateComponents();
}

private Box rightPanel;

private void initiateComponents() {
        JPanel mainPanel = new JPanel();
        mainPanel.setLayout(new MigLayout("insets 0, debug 1000", "", ""));

            this.configurationPane = new JPanel();
            this.configurationPane.setBorder(getTitleBorder("Configuration"));
            this.configurationPane.setLayout(new MigLayout());

        this.plotTabPane = new JTabbedPane();
            this.plotTabPane.add("Tab1", new JPanel());
            this.consolePane = new JPanel(new MigLayout("","",""));
            // --> The MigLayout ruins the frame.
            // --> change it to this and look at the difference:
            //                  this.consolePane = new JPanel();
            this.consolePane.setBorder(getTitleBorder("Console"));

            this.feedback = new JTextArea();
        this.feedbackPane = new JPanel();
        this.feedbackPane.setBorder(getTitleBorder("Status"));
        this.feedbackPane.setLayout(new MigLayout());
        JScrollPane sbrText = new JScrollPane(this.feedback);
        this.feedbackPane.add(sbrText, "push, grow");

        this.rightPanel = new Box(BoxLayout.Y_AXIS);
        this.rightPanel.add(this.plotTabPane);
            this.rightPanel.add(this.consolePane);

        mainPanel.add(this.configurationPane, "shrinky, top, w 450!");
        mainPanel.add(this.rightPanel, "spany 5, wrap, grow, pushx, wmin 400");
        mainPanel.add(this.feedbackPane, "pushy, growy, w 450!");

        JScrollPane contentScrollPane = new JScrollPane(mainPanel);
        contentScrollPane.setBorder(BorderFactory.createEmptyBorder());
        setContentPane(contentScrollPane);
}

private Border getTitleBorder(String title){
    return BorderFactory.createTitledBorder(null, title, TitledBorder.LEFT,       TitledBorder.TOP, new Font("null", Font.BOLD, 12), Color.BLUE);
}
 }

ターゲット: 要点は、コンソール パネルとプロット パネルが右パネルに隙間なく収まるようにし (境界線を完全に揃える)、右パネルの拡大と縮小の動作に応じて拡大と縮小を行うことです。

編集:最近発見しました。Mig レイアウト パネルを JTabbedPane に配置すると機能します。Mig レイアウト パネルを別の JPanel に配置すると機能しません。しかし、どのように、そしてなぜ、私には手がかりが1つもありません。 ここに画像の説明を入力

4

1 に答える 1