Java: вертикальное выравнивание внутри JPanel

Я пытаюсь вертикально выровнять (в центре) оба JLabels внутри одного JPanel.

JPanel panel = new JPanel();
panel.setPreferredSize(size);
JLabel label1 = new JLabel(icon);
JLabel label2 = new JLabel("text");
panel.add(label1);
panel.add(label2);

Я попытался использовать setAligmentY() без успеха. Обе метки всегда отображаются в верхней части JPanel.

UPD: ярлыки должны располагаться рядом друг с другом, например, с помощью FlowLayout, но в середине JPanel.

3 ответа

Используйте GridBagLayout с ограничениями по умолчанию. Вот небольшой демонстрационный код:

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class TestVerticalAlignement { protected void initUI() { final JFrame frame = new JFrame(); frame.setTitle("Test vertical alignement"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel panel = new JPanel(); panel.setLayout(new GridBagLayout()); GridBagConstraints gbc = new GridBagConstraints(); JLabel label1 = new JLabel("label1"); JLabel label2 = new JLabel("label2"); panel.add(label1, gbc); panel.add(label2, gbc); frame.add(panel); frame.setSize(300, 300); frame.setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new TestVerticalAlignement().initUI(); } }); }
}


вы можете увидеть этот ответ: тут

JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));


Используйте gridlayout, просто. Это должно работать.

Рассмотрим следующий пример:

import java.awt.*;
import java.applet.Applet;
import javax.swing.*;
/* <applet code="AJ07" width="450" height="450"> </applet>
*/ public class AJ07 extends JApplet{ Container c=null; public void init(){ JPanel pTop=new JPanel(); JPanel pLeft=new JPanel(); JPanel pCenter=new JPanel(); JPanel pProperties=new JPanel(); pLeft.setLayout(new GridLayout(20,1)); c=this.getContentPane(); JButton bNew=new JButton("New"); pTop.add(bNew); JButton bOpen=new JButton("Open"); pTop.add(bOpen); JButton bSave=new JButton("Save"); pTop.add(bSave); JButton bSaveAll=new JButton("Save All"); pTop.add(bSaveAll); JButton bRun=new JButton("Run"); pTop.add(bRun); JButton bStop=new JButton("Stop"); pTop.add(bStop); JButton bPause=new JButton("Pause"); pTop.add(bPause); JButton bText=new JButton("TextBox"); pLeft.add(bText); JButton bButton=new JButton("Button"); pLeft.add(bButton); pProperties.setLayout(new GridLayout(20,1)); pProperties.add(new Label("BackColor")); pProperties.add(new Label("ForeColor")); c.add(new TextArea(),BorderLayout.CENTER); c.add(pTop,BorderLayout.NORTH); c.add(pLeft,BorderLayout.WEST); c.add(new Label("Project Loaded Successfully!"),BorderLayout.SOUTH); c.add(pProperties,BorderLayout.EAST); //c.add(pCenter,BorderLayout.CENTER); } }

для которого выход выглядит следующим образом:

licensed under cc by-sa 3.0 with attribution.