Pergunta

Meu problema atual é que eu tenho um JFrame com um GridLayout 2x2. E dentro de uma das praças, eu tenho um JPanel que é exibir uma grade. Estou tendo um dia de campo com a biblioteca java swing ... dar uma olhada

Imagem

Java é automaticamente expandir cada JLabel para caber na tela. Eu quero que ele ser apenas aqueles quadrados azuis (água) e a borda preta e não que o espaço cinza. Existe uma maneira eu posso apenas definir o tamanho do que JPanel permanentemente para que eu não tenho que passar por alterar o tamanho do JFrame um milhão de vezes antes de eu chegar a dimensão exata para que o espaço cinza desaparece?

Eu também gostaria de definir o tamanho dos botões para que eles não são tão grandes (BorderLayout está sendo usado para os botões e TextField)

Foi útil?

Solução

Se você quiser os dois tabuleiros de damas para ficar do mesmo tamanho, então você vai precisar tê-los cada contida no seu próprio JPanel. Definir cada um dos pais JPanel de ter um tipo de layout de GridBagLayout. Defina o preferedSize para cada componente quadriculado e adicioná-los aos seus respectivos recipientes. GridBagLayout deve por padrão estava cada placa no centro das JPanel pais. Assim como a janela é redimensionada, área pai o JPanel terá maior ou menor, mas os componentes xadrez dentro permanecerá o mesmo tamanho.

Como alternativa, você poderia ter seus quadrados azuis escala para o tamanho certo como a janela é redimensionada por ter cada quadrado checkboard ser um JPanel com um gerenciador de layout BorderLayout e adicionando o JLabel (com uma cor de fundo azul) para sua localização BorderLayout.CENTER.

Como para seus botões, tentar algo como isto:

JPanel theButtonPanel = new JPanel(new BorderLayout());
JButton button1 = new JButton("Fire");
JButton button2 = new JButton("Pass");
JButton button3 = new JButton("Forfiet");

JPanel innerButtonContainer = new JPanel(new Grid(1, 3, 8, 8));
innerButtonContainer.add(button1);
innerButtonContainer.add(button2);
innerButtonContainer.add(button3);

theButtonPanel.add(innterButtonContainer);

Por fim, considerar o uso de uma ferramenta de design para sua interface de usuário Swing. Netbeans tem um excelente UI desenhador incorporada. Baixar Netbeans aqui .

Outras dicas

GridBagLayout é o que você realmente deseja usar. O GridLayout forçará o mesmo tamanho para cada componente no layout não importa o que as restrições tamanho que você colocar sobre eles. GridBagLayout é muito mais poderoso e muito mais complicado. Estude sobre página API para ele. Usando GridBagLayout, os componentes não vai encher todo o espaço de grade se você não quer que eles e pode até ficar do tamanho que você pedir para ele ser. Para manter o tamanho de um componente de mudar, gostaria de definir todas as três restrições de tamanho disponíveis:

water.setPreferredSize(new Dimension(20, 20));
water.setMinimumSize(new Dimension(20, 20));
water.setMaximumSize(new Dimension(20, 20));

Para seus botões, eu definitivamente usar um painel interno como Bryan menciona. Você poderia usar um GridLayout como ele sugere ou um FlowLayout se você não quiser que todos os botões para ser o mesmo tamanho. Adicionar todos os seus botões para que o painel interno em vez do principal.

Se você pode setResizeable( false ) no nível de quadro superior que você pode, então, definir o seu gerenciador de layout para nula e codificar cada localização e tamanho via setBounds. Isto é como eu faria isso (depende de redimensionamento é claro).

Eu tive problemas de resolução de sucesso como estes utilizando TableLayout que é uma terceira gerente da disposição do partido. Você precisará fazer o download e ler o tutorial mas a chave seria para definir a justificação para o centro ao adicionar os JButtons às suas posições no layout.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top