Estoy tratando de localizar a mis cuadros en el centro de la pantalla , yo sé que este código debe funcionar bien:

Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
int x = (int) ((screen.getWidth() - getWidth()) /2);
int y = (int) ((screen.getHeight() -getHeight()) /2);
setLocation(x, y); 

o esta otra :

Toolkit tk = Toolkit.getDefaultToolkit();
Dimension screenSize = tk.getScreenSize();
int screenHeight = screenSize.height;
int screenWidth = screenSize.width;
setSize(screenWidth / 2, screenHeight / 2);
setLocation(screenWidth / 4, screenHeight / 4);

He probado todos los códigos posibles, pero no sé por qué no funciona, lo acabo de mover el marco hasta la esquina inferior derecha de la pantalla he utilizado setRelative a null, pero de nuevo no funciona.

Por fin pude traer el marco muy cerca del centro multiplicando el ancho por 5 y dividir por algo, pero yo sé que este no es el camino correcto.

podría alguien por favor que me explique lo que podría estar equivocado ?

Problema Solucionado :

solución:
He encontrado la mejor manera a mí , si alguna vez vienen con el mismo problema, simplemente dejar que el netbeans hacer que automáticamente al ir a propiedades y comprobación de generar centro , olvídate de las estúpido códigos.

  • En el primer enfoque, el tamaño de la imagen puede que no se conoce todavía. Usted debe probalbly paquete primero.
  • Acabo de hacer un Jframe en netbeans y tratar de centro de él , yo no específicos de códigos, de manera que no es ningún error os algo
  • Si que es posible intentar crear marco vacío y centro de la misma. A continuación, añadir poco a poco los componentes que desea utilizar en el mismo y comprobar cuando se empieza a mostrarse no en el centro.
  • He hecho esto muchas veces, es que no trabajo yo no sé por qué yo no trabajo.
InformationsquelleAutor Loop Masters | 2012-06-27

4 Comentarios

  1. 14

    La manera más fácil al centro del fotograma en la pantalla principal (hay opciones si usted tiene que multiplicar las pantallas) es el uso de setLocationRelativeTo(…) método del marco con null como argumento:

    JFrame frame = new JFrame ();
    frame.setSize ( 500, 300 );
    frame.setLocationRelativeTo ( null );
    frame.setVisible ( true );

    En caso de que no funciona, probar este directo (coordenadas):

    Dimension ss = Toolkit.getDefaultToolkit ().getScreenSize ();
    Dimension frameSize = new Dimension ( 500, 300 );
    
    JFrame frame = new JFrame ();
    frame.setBounds ( ss.width / 2 - frameSize.width / 2, 
                      ss.height / 2 - frameSize.height / 2,
                      frameSize.width, frameSize.height );
    frame.setVisible ( true );

    Última y «ultimate» ejemplo – se mostrará centrada en el marco de @ cada sistema disponible de la pantalla:

    public static void main ( String[] args )
    {
        Dimension frameSize = new Dimension ( 500, 300 );
        for ( GraphicsDevice screen : getGraphicsDevices () )
        {
            GraphicsConfiguration gc = screen.getDefaultConfiguration ();
            Rectangle sb = gc.getBounds ();
    
            JFrame frame = new JFrame ( gc );
            frame.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE );
            frame.setBounds ( sb.x + sb.width / 2 - frameSize.width / 2,
                    sb.y + sb.height / 2 - frameSize.height / 2, frameSize.width,
                    frameSize.height );
            frame.setVisible ( true );
        }
    }
    
    public static List<GraphicsDevice> getGraphicsDevices ()
    {
        List<GraphicsDevice> devices = new ArrayList<GraphicsDevice> ();
        for ( GraphicsDevice gd : GraphicsEnvironment.getLocalGraphicsEnvironment ()
                .getScreenDevices () )
        {
            if ( gd.getType () == GraphicsDevice.TYPE_RASTER_SCREEN )
            {
                if ( gd == GraphicsEnvironment.getLocalGraphicsEnvironment ()
                        .getDefaultScreenDevice () )
                {
                    devices.add ( 0, gd );
                }
                else
                {
                    devices.add ( gd );
                }
            }
        }
        return devices;
    }
    • Ya he probado, que no está funcionando , puede haber algo mal con el netbeans ??
    • mi experiencia aquí ha sido cuando la gente pregunte si algo está mal con NetBeans o Java, las posibilidades de que esto ocurra son de < 0.001%. Las posibilidades de que algo está mal con su comprensión de Java > 99.999%. Si usted nos puede mostrar una pequeña compilable ejecutable del programa que demuestra su problema, vamos a ser capaces de mostrar donde su error. 1+ a Mikle Garin para su respuesta.
    • Se debe trabajar. Que siempre funciona en cualquier sistema operativo. A mí me parece que usted tiene algún otro código que cambia la ubicación de la estructura después de que la llamada al método. Asegúrese de que usted no llama a setLocation/setBounds después de setLocationRelativeTo llamada al método
    • Se acaba de llevar el marco a la esquina inferior derecha y no puedo entender por qué ??
    • yo apuesto a que si intentas mi simple código que funcionará para usted también. Sólo probarlo.
    • porque tienes un error, probablemente en otras partes en el código que estamos no nos muestran. Para todos nosotros sabemos que usted está tratando de hacer todo esto antes de empacar su JFrame. Pero quién sabe, ya que implica el código no se muestra.
    • Mikle acabo de hacer, pero de nuevo se trasladó a la parte inferior derecha
    • Creo que funciona +1
    • La única manera de que yo pueda traer a la pantalla muy cerca, pero no exactamente cerca de la pantalla fue multiplicar el ancho por 5 y dividiendo por 14
    • setLocationRelativeTo(null) funciona si el tamaño de la imagen no cambiará después de realizar la llamada. Así que asegúrese de que esta llamada se realiza después de que todas sus llamadas setSize()/setBounds()/pack(), y, por supuesto, usted no tiene un setLocation() después de eso.
    • compruebe 2º ejemplo de mi respuesta, se debe trabajar en cualquier caso si Java recuperar el correcto tamaño de la pantalla. De lo contrario, que podrían ser algunos de los específicos de la plataforma de error dentro de JDK. Todavía me cabe duda de que es un error JDK
    • Suena muy raro esta parte no funciona : /2 , tengo que hacer esto, pero no es preciso : *5/14
    • ¿Intentó los dos últimos ejemplos? Aparte de su código, por supuesto. Apuesto a que tienes algunos problemas en ella. Acaba de abrir nuevo proyecto y tratar allí. Por cierto ¿cuál es tu sistema operativo?
    • He encontrado algo accidentalmente por meterse con netbeans propiedades, al parecer lo hace de manera automática, gracias de todos modos.
    • Bueno, apuesto a que sólo lo hace en el marco de posicionamiento una vez que el marco se hace visible mediante la adición de un marco adicional oyente. Todavía no es una buena manera de hacer las cosas en la mayoría de los casos

  2. 3

    Ya he probado, que no está funcionando , puede haber algo mal con el netbeans ??

    tal vez no se equivocó con netbeans

    Estoy tratando de localizar a mis cuadros en el centro de la pantalla

    usted puede probar

    JFrame frame = new JFrame ();
    frame.pack(); //or frame.setSize(int, int);
    frame.setLocationByPlatform(true);
    frame.setVisible(true);
    • setLocationByPlatform no el centro de la trama en muchas plataformas. Así que esta podría ser una buena ayuda para diagnosticar el problema, pero no una correcta respuesta a la pregunta original.
  3. 2

    Yo apostaría dólares a los donuts que se establece la ubicación en relación a null /establecer la ubicación mediante coordenadas x e y antes de establecer el tamaño de la JFrame. Si no ha configurado el tamaño, sin embargo, es tratada como 0x0, la configuración de los muertos centro de el centro de la pantalla. Si, a continuación, cambiar el tamaño, se sale de la topleft esquina donde estaba (el centro de la pantalla) y escalas hacia la parte inferior derecha de la pantalla.

    En otras palabras, hacer setSize() vienen antes de centrarse en la pantalla.

    Todo lo que hizo se ve bien para mí.

Dejar respuesta

Please enter your comment!
Please enter your name here