ventana tamaño sirve setsize setpreferredsize redimensionar que para getpreferredsize evento ejemplo cambiar java swing user-interface

sirve - ¿Cómo establecer el tamaño específico de ventana(marco) en java swing?



setsize java para que sirve (2)

Bueno, estás usando frame.setSize() y frame.pack() .

Debe usar uno de ellos al mismo tiempo.

Usando setSize() puede dar el tamaño de marco que desee pero si usa pack() , cambiará automáticamente el tamaño de los marcos de acuerdo con el tamaño de los componentes en él. No tendrá en cuenta el tamaño que ha mencionado anteriormente.

Intente eliminar frame.pack() de su código o frame.pack() antes de configurar el tamaño y luego ejecútelo.

Mi código no funciona:

JFrame frame = new JFrame("mull"); mull panel = new mull(); // add panel to the center of window frame.getContentPane().add("Center", panel); frame.setSize(500, 300); // << not working!!! frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); // give a suitable size to window automatically frame.setVisible(true); // make window visible

Me estoy poniendo muy pequeña ventana. ¿Como arreglarlo?


La mayoría de los administradores de diseño funcionan mejor con el tamaño preferido de un componente, y la mayoría de las GUI son las mejores para permitir que los componentes que contienen establezcan sus propios tamaños preferidos en función de su contenido o propiedades. Para utilizar estos administradores de diseño de la mejor manera posible, llame a pack() en sus contenedores de nivel superior, como sus JFrames, antes de hacerlos visibles, ya que les indicará a estos gerentes que realicen sus acciones: diseñar sus componentes.

A menudo, cuando he tenido que jugar un papel más directo al configurar el tamaño de uno de mis componentes, anulo getPreferredSize y le devuelvo una dimensión que es mayor que el super.preferredSize (o si no, devuelve el super valor).

Por ejemplo, aquí hay una pequeña aplicación drag-a-rectangle que he creado para otra pregunta en este sitio :

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class MoveRect extends JPanel { private static final int RECT_W = 90; private static final int RECT_H = 70; private static final int PREF_W = 600; private static final int PREF_H = 300; private static final Color DRAW_RECT_COLOR = Color.black; private static final Color DRAG_RECT_COLOR = new Color(180, 200, 255); private Rectangle rect = new Rectangle(25, 25, RECT_W, RECT_H); private boolean dragging = false; private int deltaX = 0; private int deltaY = 0; public MoveRect() { MyMouseAdapter myMouseAdapter = new MyMouseAdapter(); addMouseListener(myMouseAdapter); addMouseMotionListener(myMouseAdapter); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); if (rect != null) { Color c = dragging ? DRAG_RECT_COLOR : DRAW_RECT_COLOR; g.setColor(c); Graphics2D g2 = (Graphics2D) g; g2.draw(rect); } } @Override public Dimension getPreferredSize() { return new Dimension(PREF_W, PREF_H); } private class MyMouseAdapter extends MouseAdapter { @Override public void mousePressed(MouseEvent e) { Point mousePoint = e.getPoint(); if (rect.contains(mousePoint)) { dragging = true; deltaX = rect.x - mousePoint.x; deltaY = rect.y - mousePoint.y; } } @Override public void mouseReleased(MouseEvent e) { dragging = false; repaint(); } @Override public void mouseDragged(MouseEvent e) { Point p2 = e.getPoint(); if (dragging) { int x = p2.x + deltaX; int y = p2.y + deltaY; rect = new Rectangle(x, y, RECT_W, RECT_H); MoveRect.this.repaint(); } } } private static void createAndShowGui() { MoveRect mainPanel = new MoveRect(); JFrame frame = new JFrame("MoveRect"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(mainPanel); frame.pack(); frame.setLocationByPlatform(true); frame.setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGui(); } }); } }

Tenga en cuenta que mi clase principal es un JPanel, y que anulo el getPreferredSize de JPanel:

public class MoveRect extends JPanel { //.... deleted constants private static final int PREF_W = 600; private static final int PREF_H = 300; //.... deleted fields and constants //... deleted methods and constructors @Override public Dimension getPreferredSize() { return new Dimension(PREF_W, PREF_H); }

También tenga en cuenta que cuando visualizo mi GUI, la coloco en un JFrame, call pack(); en JFrame, establece su posición y luego llama a setVisible(true); en mi JFrame:

private static void createAndShowGui() { MoveRect mainPanel = new MoveRect(); JFrame frame = new JFrame("MoveRect"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(mainPanel); frame.pack(); frame.setLocationByPlatform(true); frame.setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGui(); } }); } }