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