titledborder style poner example español borde java swing gridbaglayout

style - show panel java



¿Cómo puedo centrar correctamente un JPanel(TAMAÑO FIJO) dentro de un JFrame? (6)

En primer lugar, gracias a todos.

Respondo otra vez a mi propia pregunta, para mostrar a todos la elección que he hecho. Vea el código de muestra a continuación; Como puede ver, solo he incluido pasos mínimos que son absolutamente necesarios para lograr el objetivo.

/* file StackResponse.java */ import java.awt.*; import javax.swing.*; public class StackResponse { public static void main(String [] args) { JPanel panel = new JPanel(); Dimension expectedDimension = new Dimension(100, 100); panel.setPreferredSize(expectedDimension); panel.setMaximumSize(expectedDimension); panel.setMinimumSize(expectedDimension); panel.setBackground(Color.RED); // for debug only Box box = new Box(BoxLayout.Y_AXIS); box.add(Box.createVerticalGlue()); box.add(panel); box.add(Box.createVerticalGlue()); JFrame frame = new JFrame(); frame.add(box); frame.setSize(new Dimension(200, 200)); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setMinimumSize(frame.getMinimumSize()); // cannot be resized- frame.setVisible(true); } }

Here puedes ver una captura de pantalla.

Problema resuelto. Muchas gracias de nuevo a todos.

ESO

¡Hola a todos! Estoy tratando de resolver un problema aparentemente simple, pero no puedo solucionarlo. Estoy trabajando en una aplicación de ejemplo con bibliotecas de Java / Swing; Tengo un JFrame y un JPanel. Solo quiero lograr los siguientes objetivos:

  1. JPanel DEBE estar centrado dentro del JFrame.

  2. JPanel DEBE TENER SIEMPRE el tamaño especificado con
    Método setPreferredSize () NO DEBE ser redimensionado bajo este tamaño.

Lo intenté usando un GridBagLayout: es la ÚNICA manera de hacerlo.

Vea la muestra a continuación:

/* file StackSample01.java */ import java.awt.*; import javax.swing.*; public class StackSample01 { public static void main(String [] args) { JFrame frame = new JFrame(); JPanel panel = new JPanel(); panel.setPreferredSize(new Dimension(100, 100)); panel.setBackground(Color.RED); frame.setLayout(new GridBagLayout()); frame.add(panel, new GridBagConstraints()); frame.setSize(new Dimension(200, 200)); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }

Here una captura de pantalla:

No usaría un GridBagLayout para hacer algo demasiado simple. Probé una solución más simple, usando una caja, pero esto no funciona:

Código de muestra:

/* file StackSample02.java */ import java.awt.*; import javax.swing.*; public class StackSample02 { public static void main(String [] args) { JFrame frame = new JFrame(); JPanel panel = new JPanel(); panel.setPreferredSize(new Dimension(100, 100)); panel.setBackground(Color.RED); // for debug panel.setAlignmentX(JComponent.CENTER_ALIGNMENT); // have no effect Box box = new Box(BoxLayout.Y_AXIS); box.add(Box.createVerticalGlue()); box.add(panel); box.add(Box.createVerticalGlue()); // causes a deformation frame.add(box); frame.setSize(new Dimension(200, 200)); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }

Here una captura de pantalla,

¿Algunas ideas? Gracias a todos :-)


Es solo tener

jPanel.setBounds (x, y, 1046, 503);

Donde x es espacio para el lado derecho e y es espacio para el lado izquierdo. Tienes que calcular el espacio desde ambos lados según la altura y el ancho de la pantalla


Puedes hacerlo. Tenía que hacer un juego de ajedrez, y quería que la pieza de ajedrez siempre se colocara en el centro de una celda, que era un JlayeredPane:

private void formMouseReleased(java.awt.event.MouseEvent evt) { // TODO add your handling code here: if (jl != null) { jl.setLocation(evt.getX()+10, evt.getY()+10); Component com = findComponentAt(evt.getPoint()); if (com instanceof JPanel) { // System.out.println("Yes, it''s a jpanel"); ((JPanel)com).add(jl); ((JPanel)com).validate(); } } }


cree un panel con el nombre "FixedPanel" con GridBagLayout y establezca el tamaño preferido para el tamaño del marco, luego agregue su marco al FixedPanel.

Frame = new JFrame("CenterFrame"); Frame.setLocation(0, 0); Frame.setSize(new Dimension(400,400));//dim JPanel FixedPanel = new JPanel(new GridBagLayout()); FixedPanel.setPreferredSize(Frame.getSize()); JPanel myPanel = new JPanel(); myPanel.setPreferredSize(new Dimension(100,100)); myPanel.setBackground(Color.BLACK); FixedPanel.add(myPanel); Frame.add(FixedPanel); Frame.setVisible(true);


utilizar

panel.setMaximumSize(new Dimension(200,200)); panel.setResizable(false)

¿en lugar?


BoxLayout puede bastante para mantener su setXxxSize (), luego simplemente agregar panel.setMaximumSize(new Dimension(100, 100));

y tu salida seria

Eliminado por setMinimumSize ( note si Container tiene un tamaño mayor como ...)

import java.awt.*; import javax.swing.*; public class CustomComponent12 extends JFrame { private static final long serialVersionUID = 1L; public CustomComponent12() { Box box = new Box(BoxLayout.Y_AXIS); box.setAlignmentX(JComponent.CENTER_ALIGNMENT); box.add(Box.createVerticalGlue()); box.add(new CustomComponents12()); box.add(Box.createVerticalGlue()); add(box); pack(); setTitle("Custom Component Test / BoxLayout"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setMaximumSize(getMinimumSize()); setMinimumSize(getMinimumSize()); setPreferredSize(getPreferredSize()); setLocation(150, 150); setVisible(true); } public static void main(String[] args) { Runnable r = new Runnable() { @Override public void run() { CustomComponent12 main = new CustomComponent12(); } }; javax.swing.SwingUtilities.invokeLater(r); } } class CustomComponents12 extends JPanel { private static final long serialVersionUID = 1L; @Override public Dimension getMinimumSize() { return new Dimension(100, 100); } @Override public Dimension getMaximumSize() { return new Dimension(100, 100); } @Override public Dimension getPreferredSize() { return new Dimension(100, 100); } @Override public void paintComponent(Graphics g) { int margin = 10; Dimension dim = getSize(); super.paintComponent(g); g.setColor(Color.red); g.fillRect(margin, margin, dim.width - margin * 2, dim.height - margin * 2); } }