
Опытный
 
Профиль
Группа: Участник
Сообщений: 586
Регистрация: 18.8.2011
Где: Красноярск
Репутация: 2 Всего: 17
|
День добрый. Мне нужно создать узкое окно для легенды к рисункам. Легенда как правило состоит из нескольких подпанелей и создается и меняется динамически. Я создаю ранель легенд и размещаю его в восточную часть панели (BorderLayout). Подпанели легенды состоят из одного - двух столбцов и я делаю их в GridBagLayout. Все бы ничего, но вот при изменении размеров вид становится малоприличный | Код | import javax.swing.*; import javax.swing.event.ChangeListener; import javax.swing.event.ChangeEvent; import java.awt.*;
public class BoxLayoutTestGBL extends JFrame{
public BoxLayoutTestGBL(){ super("BoxLayout"); final JPanel content = new JPanel(); content.setBorder(BorderFactory.createLineBorder(Color.red)); content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
JPanel pan1 = new JPanel(); pan1.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.BLACK), "Legend"));
pan1.setLayout(new GridBagLayout());
JLabel lbl = new JLabel("Label 1"); lbl.setBorder(BorderFactory.createLineBorder(Color.blue)); lbl.setFont(lbl.getFont().deriveFont(30f)); pan1.add(lbl, new GridBagConstraints(0, 0, 1, 1, 0, 0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0, 0));
lbl = new JLabel("Label 2"); lbl.setBorder(BorderFactory.createLineBorder(Color.blue)); lbl.setFont(lbl.getFont().deriveFont(30f)); pan1.add(lbl, new GridBagConstraints(0, 1, 1, 1, 0, 0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0, 0));
content.add(pan1);
pan1 = new JPanel(); pan1.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.BLACK), "Legend"));
pan1.setLayout(new GridBagLayout());
lbl = new JLabel("Label 3"); lbl.setBorder(BorderFactory.createLineBorder(Color.blue)); lbl.setFont(lbl.getFont().deriveFont(30f)); pan1.add(lbl, new GridBagConstraints(0, 0, 1, 1, 0, 0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0, 0));
lbl = new JLabel("Label 4"); lbl.setBorder(BorderFactory.createLineBorder(Color.blue)); lbl.setFont(lbl.getFont().deriveFont(30f)); pan1.add(lbl, new GridBagConstraints(0, 1, 1, 1, 0, 0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0, 0));
content.add(pan1);
getContentPane().add(content, BorderLayout.EAST); setSize(410,220); setLocationRelativeTo(null); setDefaultCloseOperation(EXIT_ON_CLOSE); }
public static void main(String[] args){ JFrame.setDefaultLookAndFeelDecorated(true); new BoxLayoutTestGBL().setVisible(true); } }
|
А хотелось бы вот такого поведения: | Код | import javax.swing.*; import javax.swing.event.ChangeListener; import javax.swing.event.ChangeEvent; import java.awt.*;
public class BoxLayoutTest extends JFrame{
public BoxLayoutTest(){ super("BoxLayout"); final JPanel content = new JPanel(); content.setBorder(BorderFactory.createLineBorder(Color.red)); content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
JPanel pan1 = new JPanel(); pan1.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.BLACK), "Legend"));
pan1.setLayout(new BoxLayout(pan1, BoxLayout.Y_AXIS));
JLabel lbl = new JLabel("Label 1"); lbl.setBorder(BorderFactory.createLineBorder(Color.blue)); lbl.setFont(lbl.getFont().deriveFont(30f)); pan1.add(lbl);
lbl = new JLabel("Label 2"); lbl.setBorder(BorderFactory.createLineBorder(Color.blue)); lbl.setFont(lbl.getFont().deriveFont(30f)); pan1.add(lbl); content.add(pan1);
pan1 = new JPanel(); pan1.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.BLACK), "Legend"));
pan1.setLayout(new BoxLayout(pan1, BoxLayout.Y_AXIS));
lbl = new JLabel("Label 3"); lbl.setBorder(BorderFactory.createLineBorder(Color.blue)); lbl.setFont(lbl.getFont().deriveFont(30f)); pan1.add(lbl);
lbl = new JLabel("Label 4"); lbl.setBorder(BorderFactory.createLineBorder(Color.blue)); lbl.setFont(lbl.getFont().deriveFont(30f)); pan1.add(lbl);
content.add(pan1);
getContentPane().add(content, BorderLayout.CENTER); setSize(410,220); setLocationRelativeTo(null); setDefaultCloseOperation(EXIT_ON_CLOSE); }
public static void main(String[] args){ JFrame.setDefaultLookAndFeelDecorated(true); new BoxLayoutTest().setVisible(true); } }
|
Заранее благодарен за совет
--------------------
Mirkes
|