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();
 }
 });
 }
}


вы можете увидеть этот ответ: qaru.site/questions/151312/...

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.