Pregunta

Estoy creando una aplicación simple TIC TAC TOE en Swing usando SetBounds (diseño nulo).

Mi problema es que el componente que agrego al final no sea visible en el marco o distorsiona la GUI completa. Mi código explicaría mejor esto

import java.awt.*;
import javax.swing.*;
class ZeroKata
{
    ButtonGroup p1group,p2group;
    Font f;
    JButton begin,b1,b2,b3,b4,b5,b6,b7,b8,b9;
    JCheckBox p1K,p2K,p1Z,p2Z;
    JFrame frame;
    JLabel player1,player2,p1Name,p2Name,p1Symbol,p2Symbol,status,dummy; //  dummy label for my problem
    JPanel buttons;
    JTextField name1,name2;
    private void addComponents(Container parent,JComponent...c)
    {
        for(JComponent C:c)
            parent.add(C);
    }
    public ZeroKata()
    {
        frame = new JFrame("Tic Tac Toe");
        frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
        frame.setSize(900,650);
        frame.setResizable(true);
        frame.setVisible(true);

        buttons = new JPanel();
        buttons.setLayout(new GridLayout(3,3,10,10));
        begin = new JButton("START GAME");
        b1 = new JButton(" ");
        b2 = new JButton(" ");
        b3 = new JButton(" ");
        b4 = new JButton(" ");
        b5 = new JButton(" ");
        b6 = new JButton(" ");
        b7 = new JButton(" ");
        b8 = new JButton(" ");
        b9 = new JButton(" ");

        p1K = new JCheckBox("X");
        p1Z = new JCheckBox("O");
        p2K = new JCheckBox("X");
        p2Z = new JCheckBox("O");

        p1group = new ButtonGroup();
        p2group = new ButtonGroup();

        p1group.add(p1K);
        p1group.add(p1Z);
        p2group.add(p2K);
        p2group.add(p2Z);

        name1 = new JTextField(30);
        name2 = new JTextField(30);

        f = new Font("Georgia",Font.PLAIN,38);
        player1 = new JLabel (" << PLAYER 1 >>");
        p1Name = new JLabel ("NAME : ");
        p1Symbol = new JLabel ("SYMBOL : ");
        player2  = new JLabel ("<< PLAYER 2 >>");
        p2Name = new JLabel ("NAME : ");
        p2Symbol = new JLabel ("SYMBOL : ");
        status = new JLabel ("GAME STATUS -->> ");
        dummy = new JLabel ("   ");

        addComponents(buttons,b1,b2,b3,b4,b5,b6,b7,b8,b9);

        player1.setBounds(100,100,100,30);
        p1Name.setBounds(120,150,100,30);
        p1Symbol.setBounds(120,200,60,30);
        player2.setBounds(100,250,100,30);
        p2Name.setBounds(120,300,100,30);
        p2Symbol.setBounds(120,350,50,30);
        name1.setBounds(200,150,150,30);
        p1K.setBounds(200,200,50,30);
        p1Z.setBounds(250,200,50,30);
        name2.setBounds(200,300,150,30);
        p2K.setBounds(200,350,50,30);
        p2Z.setBounds(250,350,50,30);
        buttons.setBounds(500,100,250,250);
        dummy.setBounds(20,20,30,30);
        begin.setBounds(200,500,150,30);

        frame.add(player1);
        frame.add(p1Name);
        frame.add(p1Symbol);
        frame.add(player2);
        frame.add(p2Name);
        frame.add(p2Symbol);
        frame.add(name1);
        frame.add(name2);
        frame.add(begin);
        frame.add(buttons);
        frame.add(p1K);
        frame.add(p1Z);
        frame.add(p2K);
        frame.add(p2Z);

        /*  u need to add a dummy label also to let GUI work correctly, dont know whyx !
        frame.add(dummy); */
    }
    public static void main(String...args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                new ZeroKata();
            }
        });
    }
}

Es un código simple, simplemente no sé a dónde me equivoco. Gracias por adelantado !

¿Fue útil?

Solución

El administrador de diseño predeterminado es un BorderLayout (ver JFrame visión general), configúralo en null Para permitir el posicionamiento absoluto:

frame.setLayout(null);

Otros consejos

Mi problema es que el componente que agrego al final no sea visible en el marco o distorsiona la GUI completa. Mi código explicaría mejor esto

  • tu agregaste JComponentS al ya visible JFrame,

  • Muevete frame.setVisible(true); Como última línea de código, después de todo JComponents se agregan

  • Swing Gui debe comenzar Hilos iniciales

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top