Я пытаюсь поместить компоненты в панели разных размеров. Но я понял, что GridLayout разделяет части с одинаковыми размерами. Как это может быть достигнуто, как описано ниже изображенияКачающиеся панели разных размеров
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class PanelDemo {
PanelDemo() {
// Create a new JFrame container. Use the default
// border layout.
JFrame jfrm = new JFrame("Use Three JPanels with Different Sizes");
// Specify FlowLayout manager.
jfrm.getContentPane().setLayout(new GridLayout(1, 3));
// Give the frame an initial size.
jfrm.setSize(900, 300);
// Terminate the program when the user closes the application.
jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Create the first JPanel.
JPanel jpnl = new JPanel();
jpnl.setLayout(new GridLayout(2, 4));
// Set the preferred size of the first panel.
jpnl.setPreferredSize(new Dimension(500, 300));
// Make the panel opaque.
jpnl.setOpaque(true);
// Add a blue border to the panel.
jpnl.setBorder(
BorderFactory.createLineBorder(Color.BLUE));
// Create the second JPanel.
JPanel jpnl2 = new JPanel();
//jpnl2.setLayout(new FlowLayout());
// Set the preferred size of the second panel.
jpnl2.setPreferredSize(new Dimension(300, 300));
// Make the panel opaque.
jpnl2.setOpaque(true);
jpnl2.setBorder(
BorderFactory.createLineBorder(Color.RED));
JPanel jpnl3 = new JPanel();
jpnl3.setOpaque(true);
jpnl3.setPreferredSize(new Dimension(100, 300));
jpnl3.setBorder(
BorderFactory.createLineBorder(Color.ORANGE));
// Add the panels to the frame.
jfrm.getContentPane().add(jpnl);
jfrm.getContentPane().add(jpnl3);
jfrm.getContentPane().add(jpnl2);
// Display the frame.
jfrm.setVisible(true);
}
public static void main(String args[]) {
// Create the frame on the event dispatching thread.
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new PanelDemo();
}
});
}
}
'BorderLayout' используя' LINE_START', '' CENTER' & LINE_END' ограничения могут сделать это. Но если графический интерфейс изменен, центральная панель получит дополнительное пространство. –
BTW - что находится в каждой панели? Если «компоненты» лучше всего разрешить макет, используемый для панели, давать подсказки относительно предпочтительного размера, а не явно устанавливать его. Затем вместо вызова 'jfrm.setSize (900, 300);' - просто позвонить 'jfrm.pack();' (после добавления всех компонентов). –
BoxLayout? GridBagLayout? Прочтите учебник Swing [Менеджеры макетов] (http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html). Каждый менеджер макетов имеет разные правила для изменения размера при изменении размера фрейма. Какой бы макет вы ни использовали, зависит от ваших точных требований. Играйте с каждым менеджером макета, а затем решайте, что лучше всего подходит для вашего требования. – camickr