2011-08-06 15 views
10

Empecé a utilizar MiGLayout hace aproximadamente un mes y medio y todo es simple y funciona muy bien. Solo tengo un problema que no he podido solucionar.Cómo centrar un componente en una fila que contiene componentes múltiples con MiGLayout

Digamos que yo quiero tener una fila que tiene dos botones en la parte más a la derecha lado y un título centrado, el título no se consigue realmente centrado cuando lo hago de esta manera:

("este" es un JPanel)

this.add(labelTitle, "split, span, center"); 
this.add(closeButton, "east"); 
this.add(mainMenuButton, "east"); 

lo que ocurre es que "labelTitle" se centra en el espacio que queda disponible después de los botones están colocados, pero en realidad quiero que estar centrado con respecto a todo el JPanel, no sólo el espacio restante .

¿Qué parámetros podría usar para obtener el efecto deseado? Sé que podría utilizar el posicionamiento absoluto, pero no quiero hacer eso porque, en primer lugar, en mi caso, se pierde el objetivo de usar MiGLayout.

Respuesta

6

¿Puede ser algo como esto lo que estás buscando?

¡Salud!

public static void main(String[] args) 
{ 
    JFrame frame = new JFrame(); 

    JPanel panel = new JPanel(new MigLayout("debug")); 
    panel.add(new JLabel("Label Title"), "x2 min(b1.x - unrel, (container.w+pref)/2)"); 
    panel.add(new JButton("Close Button"), "id b1, pushx, alignx right"); 
    panel.add(new JButton("Main Menu Button"), "alignx right"); 

    frame.add(panel); 
    frame.setSize(800, 200); 
    frame.setLocationRelativeTo(null); 
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
    frame.setVisible(true); 
} 
+0

Funciona sin problemas. Sin embargo, no sé lo suficiente de MiGL para entender todos los parámetros. ¿Te importa explicar cómo funciona la etiqueta del título? ¡Realmente aprecio tu ayuda! –

+0

Es fácil. Simplemente establece una expresión para el lado derecho (x2) de la etiqueta. En la expresión está la x del botón izquierdo y para poder consultarlo establecí una ID de b1. –

1

Puede usar el JXLayer y colocar los botones en el cristal.

JButton closeButton = new JButton("Close"); 
JButton mainMenuButton = new JButton("Menu"); 
JLabel labelTitle = new JLabel("Application"); 

JPanel panel = new JPanel(); 
panel.setLayout(new MigLayout(new LC().fillX())); 
panel.add(labelTitle, new CC().alignX("center").spanX()); 

JPanel buttonPanel = new JPanel(); 
buttonPanel.setLayout(new MigLayout(new LC().fillX())); 
buttonPanel.add(closeButton, new CC().alignX("right").split()); 
buttonPanel.add(mainMenuButton, new CC().alignX("right")); 
buttonPanel.setOpaque(false); 

JXLayer<JPanel> mainPanel = new JXLayer<JPanel>(); 
mainPanel.setView(panel); 
mainPanel.setGlassPane(buttonPanel); 

JFrame frame = new JFrame(); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
frame.setContentPane(mainPanel); 
frame.setSize(400, 600); 
frame.setVisible(true); 
+0

estoy bastante seguro de que funcionaría, pero yo estoy buscando una solución con MiGLayout, gracias de todos modos! –

0

Al crear sus JPanel, utilice el siguiente MigLayout inicializador:
new MigLayout("","[]push[center]push[]","")

Si usted no sabe acerca de las limitaciones, marque aquí: MigLayout Whitepaper

Esto es suponiendo que no tiene cualquier otra cosa en este JPanel ...

+0

Gracias por intentarlo, pero no funciona, todavía se centra en el espacio RESTANTE, que no es el centro del panel. –

+0

¿Has probado '" dock center "' al agregar la etiqueta? – BenCole

+0

Sí, y no funcionó, no sé por qué. @Mikael Grev me dio una solución de trabajo, ¡gracias por intentarlo! –

Cuestiones relacionadas