En java ¿cómo agregar un JPanel a otro JPanel

Quiero añadir 3 JPanels, todos los espaciados a diferentes distancias, que llenan el Panel de Contenido/JFrame.
En la actualidad, add(new JPanel()) se overrite el actual panel de contenido o no aparece en absoluto.

Idealmente quiero que el código similares (por ejemplo del amor):

JPanel panel1 = new JPanel();
panel1.add(new jbutton())
panel1.setBounds(0,0,100,100);

JPanel panel2 = new JPanel();
panel2.add(new jbutton());
panel2.setBounds(100,0,100,100);

getContentPane().add(panel1);
getContentPane().add(panel2);

Etc…

Sé que un panel puede ser añadido a un panel porque yo lo he hecho con borderlayout.
Por favor, no me digas que el uso de un administrador de diseño, he estado usando gridbag y no ha producido los resultados que quiero.

Me gustaría control total sobre mis objetos de tamaño y colocación. También, por favor, no me diga, «eres tonta; esto es estúpido, ¿por qué iba a querer hacer eso?»

Sólo es útil respuestas por favor! Yo no soy un programador novato, un tipo frustrado con interfaces gráficas de usuario, así que siéntase libre para ir a lo mas profundo de profundidad como le gustaría.

  • El uso de un administrador de diseño. Si uno no hace lo que desea, a continuación, utilizar otro. Si todos ellos no hacen lo que quieres, entonces aprender a utilizarlas en detalles porque gestor de diseño es la única manera de establecer un diseño (bueno.. es por eso que se llama «diseño» de los directivos)
  • No es estrictamente cierto, pero es la forma recomendada de hacer las cosas – incluso si esto significa la escritura de un administrador de diseño personalizado.
  • «Por favor no me digas..» la respuesta obvia – dime lo que quiero escuchar. Después de todo, yo estoy pagando por esto de la mesa de ayuda de soporte de contrato. (El problema es que no estás ya sea pagando o en una mesa de ayuda.)

4 Kommentare

  1. 2

    El panel de contenido de un JFrame utiliza un BorderLayout por defecto, por lo que cada vez que se añade un nuevo panel a ella, sin especificar su ubicación en el trazado, que se añade a la del centro, y por lo tanto sustituye a la anterior.

    Sólo tienes que configurar el panel de contenido del diseño de lo que usted desea. Por supuesto, puede utilizar la nula disposición (es decir, establecer el diseño en null), pero vas a ser mordido por este diseño de error de algún tiempo. Sólo porque usted no ha sido capaz de utilizar el diseño de los gerentes no significa que usted no debe. Sólo seguir aprendiendo. GridBagLayout es uno de los más complejos. Usted podría utilizar otros primero.

  2. 1

    Quiero añadir 3 JPanels, todos los espaciados a diferentes distancias, que llenan el Panel de Contenido/JFrame.

    De ejemplo los paneles no están espaciados a diferentes distancias. Los paneles se conectan el uno al otro. Así que todo lo que necesitas para que haga uso de un panel con un FlowLayout que utiliza un espacio horizontal de 0.

    El código principal puede ser algo como:

    JPanel main = new JPanel( new FlowLayout(FlowLayout.CENTER, 0, 0) );
    
    JPanel panel1 = new JPanel();
    panel1.setPreferredSize( new Dimension(100, 100) );
    panel1.add( new JButton() );
    main.add( panel1 );
    
    JPanel panel2 = new JPanel();
    panel2.setPreferredSize( new Dimension(100, 100) );
    panel2.add( new JButton() );
    main.add( panel2 );
    
    frame.add( main );

    Dado que puedes encontrar de diseño de código como este confuso, me permito sugerir que usted realmente no entiende cómo utilizar el diseño de los gerentes. Y como todo el mundo le sugiero que se tome el tiempo para entender cómo utilizar el diseño de los gestores para su ventaja.

    Por la forma, el uso de una nula disposición, NO te hacen la vida más fácil. Asegúrese de que usted puede colocar los componentes de exactamente donde usted quiere,pero usted no satisfacer el requisito de que los paneles ocupan la totalidad del espacio del panel de contenido? Usted no será capaz de utilizar el pack() método de la trama porque cuando se utiliza un null diseño, su «principal» del panel no tiene un tamaño preferido así que cuando usted hace el marco visible todo lo que se ve es la barra de título y de las fronteras. Si manualmente se intenta establecer el tamaño del marco, a continuación, sí usted sabe el tamaño de los 3 paneles (300 x 100), pero usted no sabe el tamaño de la barra de título y de las fronteras. Así que usted no será capaz de calcular el tamaño correctamente.

    Puede tomar un par de minutos más para entender el diseño de gerentes, pero es bien vale la pena.

  3. 0

    Diseño de los gerentes le permitirá controlar plenamente su componente de colocación y el tamaño, usted sólo tiene que encontrar el uno que es lo suficientemente simple para su aplicación, mientras que dan la cantidad de control que usted necesita. Haciendo sin un gestor de diseño es posible, pero yo nunca iba a sugerir una forma de escribir el código GUI, terminará la gestión de demasiados GUI cosas que generalmente son correctamente gestionados por un LayoutManager (tales como espacio libre de gestión de, de padres de cambio de tamaño de ventana..).

    La mayoría de los LayoutManager clases de trabajo de la misma manera; cuando se agrega un componente a un Container, también puede especificar una restricción, la cual indicará la LayoutManager donde colocar el componente, y cómo manejar todo tipo de eventos que tiene una influencia en la colocación de los componentes (tales como cambiar el tamaño del contenedor). Algunos diseños tienen los gerentes muy simple de restricciones (BorderLayout sólo pregunta por la ubicación del componente), mientras que otros tienen un muy completo conjunto de restricciones (GridBagLayout, a través de la GridBagConstraints clase)

    La LayoutManager que yo prefiero es la GridBagLayout (JavaDoc). Cuando el uso correcto de las GridBagContraints clase, puede especificar la ubicación de los elementos gráficos se muestran, lo que el espaciado que hay entre cada componente, cómo el espacio libre se distribuye, etc.. Esta tutorial debería ayudarle a conseguir comenzado con este layout manager.

    Si este no satisface sus necesidades, o si usted siente que es demasiado complejo, usted debe buscar en la web para tutoriales sobre otros LayoutManager.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea