У меня возникают проблемы при удалении пробелов / пробелов в верхней части окна моей программы, когда они развернуты. Это не проблема, когда в меньшем окне, но появляется снова, когда размер окна изменяется до определенных размеров и / или загружаются данные. Мне бы хотелось, чтобы пропорции были одинаковыми во всех измерениях, причем заголовок (- в данном случае) отображается непосредственно под строкой меню.
Я использую gridbaglayout как для родительского JFrame, так и для контента ( часть, которая не является строкой меню):
Форматирование класса MainPanel:
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
mainPanel = new javax.swing.JPanel();
textScrollPane = new javax.swing.JScrollPane();
contigText = new javax.swing.JTable();
tableScrollPane = new javax.swing.JScrollPane();
contigTable = new javax.swing.JTable();
contigLabel = new javax.swing.JLabel();
load = new javax.swing.JButton();
viewLabel = new javax.swing.JLabel();
tableLabel = new javax.swing.JLabel();
java.awt.GridBagLayout jPanel1Layout = new java.awt.GridBagLayout();
jPanel1Layout.columnWeights = new double[] { 1.0 };
jPanel1Layout.rowWeights = new double[] { 1.0 };
mainPanel.setLayout(jPanel1Layout);
textScrollPane.setViewportView(contigText);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
mainPanel.add(textScrollPane, gridBagConstraints);
tableScrollPane.setViewportView(contigTable);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 5;
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.RELATIVE;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
mainPanel.add(tableScrollPane, gridBagConstraints);
contigLabel.setText("--");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.weighty = 1.0;
gridBagConstraints.gridheight = 1;
mainPanel.add(contigLabel, gridBagConstraints);
load.setText("Load");
load.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
loadMouseClicked(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 6;
mainPanel.add(load, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weighty = 0.5;
viewLabel.setText("Contig View");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
mainPanel.add(viewLabel, gridBagConstraints);
tableLabel.setText("Contig Table");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 4;
mainPanel.add(tableLabel, gridBagConstraints);
}
Класс GUI, вызываемый из основного метода:
public class Gui {
/**
* Function to handle GUI-related drawing functions.
*/
public static void show() {
JFrame frame = new JFrame();
MenuBar menuBar = new MenuBar(frame);
MainPanel mainPanel = new MainPanel(menuBar);
frame.setLayout(new java.awt.GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.PAGE_START;
gbc.fill = GridBagConstraints.BOTH;
gbc.weightx = 0.0;
gbc.weighty = 1;
frame.getContentPane().add(menuBar.getMainComponent(), gbc);
gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.BOTH;
gbc.weightx = 1;
gbc.weighty = 1;
gbc.gridy = 1;
gbc.anchor = GridBagConstraints.PAGE_START;
frame.getContentPane().add(mainPanel.getMainComponent(), gbc);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationByPlatform(true);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setVisible(true);
}
}
Menubar Class
package contigviewer;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MenuBar {
private JMenuItem barItem1;
private JMenuItem barItem2;
private JPanel menuBarPanel;
private String fasta;
private String august;
/**
* Constructor for the MenuBar Class.
* <p>
* Constructs the MenuBar Object, taking data from the referenced JFrame object.
* </p>
* @param frame JFrame - The parent JFrame.
*/
public MenuBar(JFrame frame) {
august = "";
barItem1 = new JMenuItem(new AbstractAction("Select FASTA File") {
@Override
public void actionPerformed(ActionEvent arg0) {
try {...}
}
});
barItem2 = new JMenuItem(new AbstractAction("Select Augustus GTF/GFF File") {
@Override
public void actionPerformed(ActionEvent arg0) {
try {...}
}
});
JMenu fileMenu = new JMenu("File");
fileMenu.add(barItem1);
fileMenu.add(barItem2);
JMenuBar menuBar = new JMenuBar();
menuBar.add(fileMenu);
menuBarPanel = new JPanel(new BorderLayout());
menuBarPanel.add(menuBar, BorderLayout.PAGE_START);
}
}
Есть идеи, как остановить это поведение и заставить окно работать согласованно для всех размеров? Я был бы признателен за любую помощь, GUI вещи на самом деле не приходят ко мне естественно!