У меня проблема с макетом Мига. Я начал воссоздавать основную JPanel JFrame, где в прошлом использовал абсолютный макет. Сначала все шло хорошо (см. второе изображение). Панель консоли (часть коробки с панелью вкладок) имела хорошее выравнивание, но все же абсолютный макет. Когда я начал преобразовывать макет отдельных панелей JPanel в макет Mig, он выглядел как первое изображение (без выравнивания по левому краю). Тот же результат справедлив и для других панелей JPanel, где я изменил абсолютный макет на макет Mig.
https://i.stack.imgur.com/97Yop.png [ПЛОХО] https://i.stack.imgur.com/KTLGK.png [ХОРОШО]
https://i.stack.imgur.com/p3qWZ.png [отладка 1000 выравнивания]
Вот уменьшенная версия моего класса фреймов. Структура выглядит странно, потому что я старался максимально уменьшить ее. Я также удалил ControlConsolePanel, потому что моя проблема возникает даже с JPanel по умолчанию с MigLayout.
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. Но как и почему, я понятия не имею.