Pessoal,
Estou com problemas ao utilizar o GridLayout. Ele não ocupa toda a área do frame. (Imagem em anexo).
Abaixo o meu código;
[code]import java.awt.;
import javax.swing. ;
import java.util.*;
public class GridLayoutDemo {
private static void createAndShowGUI() {
int linhas = 20;
int colunas = 65;
int espacamento = 3;
JFrame frame = new JFrame("GridLayoutDemo");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JPanel principal = new JPanel();
GridLayout layout = new GridLayout();
layout.setColumns(colunas);
layout.setRows(linhas);
layout.setHgap(espacamento);
layout.setVgap(espacamento);
principal.setLayout(layout);
principal.setBackground(Color.BLACK);
for (int i = 0; i < linhas; i++) {
for (int j = 0; j < colunas; j++) {
JPanel temp = new JPanel();
if (new Random().nextBoolean()) {
temp.setBackground(Color.YELLOW);
} else {
temp.setBackground(Color.WHITE);
}
principal.add(temp);
}
}
frame.add(principal);
frame.setSize(640, 190);
frame.setLocationRelativeTo(null);
frame.setResizable(false);
frame.setVisible(true);
layout.layoutContainer(principal);
}
public static void main(String[] args) {
createAndShowGUI();
}
}[/code]
Alguém tem alguma sugestão?
Aumente o numero de colunas ou entao diminua o tamanho do frame ou ainda, compacte o frame
Roger1
Dezembro 22, 2006, 12:52pm
#3
Abaixo do frame.setVisible(true);
coloque
frame.pack();
testei aqui e funcionou, caso não dê certo avisa aí.
Roger
[quote=zetamayossi]Aumente o numero de colunas…[/quote]Independente do número de linhas e colunas, sempre sobra espaço.
[quote=zetamayossi]…entao diminua o tamanho do frame…[/quote]O problema persiste.
[quote=zetamayossi]… ou ainda, compacte o frame[/quote]Com o método pack() ? Vai funcionar, só que ele redimensionará o frame (e não quero isso)
Mesmo assim, obrigado
[quote=Roger–]Abaixo do frame.setVisible(true);
coloque
frame.pack();
testei aqui e funcionou, caso não dê certo avisa aí.
Roger[/quote]Como já disse, assim funciona, só que ele vai aumentar ou diminuir o frame de maneira que todos os componentes sejam encaixados num tamanho que ele determinar. Gostaria que fosse ocupada toda a área do tamanho que eu defini (640 x 190)
Flasoft
Dezembro 22, 2006, 1:59pm
#6
em GridLayout todas as celulas tem q ter exatamente o msm tamanho…
Por consequencia disto e por vc colocar muitas colunas ele divide a largura pela quatidade de colunas e arredonda o acarreta em diminuir a celula, e como são muitas colunas esta diferença acaba sendo grande no final…
uma tentativa de solução foi o GridBagLayout q tenta ocupar tota a area com uma margem de diferença…
veja se minha implementação é o q vc queria…
[code]import java.awt.;
import javax.swing. ;
import java.util.*;
public class GridLayoutDemo {
private static void createAndShowGUI() {
int linhas = 20;
int colunas = 65;
int espacamento = 2;
JFrame frame = new JFrame("GridLayoutDemo");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JPanel principal = new JPanel();
GridBagConstraints c = new GridBagConstraints();
GridBagLayout layout = new GridBagLayout();
principal.setLayout(layout);
principal.setBackground(Color.BLACK);
for (int i = 0; i < linhas; i++) {
for (int j = 0; j < colunas; j++) {
JPanel temp = new JPanel();
if (new Random().nextBoolean()) {
temp.setBackground(Color.YELLOW);
} else {
temp.setBackground(Color.WHITE);
}
c = new GridBagConstraints();
c.insets = new Insets(espacamento,espacamento,espacamento,espacamento);
c.gridx = j+1;
c.gridy = i+1;
//...ALTERADO...
c.weightx = (i % 2 == 1 ? 5.0 : 4.0 );
c.weighty = (j % 2 == 1 ? 5.0 : 4.0 );
//...ALTERADO...
c.fill = GridBagConstraints.BOTH;
principal.add(temp, c);
}
}
frame.setLayout(new BorderLayout());
frame.add(principal, BorderLayout.CENTER);
frame.setSize(640, 190);
//frame.setLocationRelativeTo(null);
//frame.setResizable(false);
frame.setVisible(true);
//layout.layoutContainer(principal);
}
public static void main(String[] args) {
createAndShowGUI();
}
}[/code]
1 curtida
Valeu, Flasoft. Era isso mesmo que eu queria.
Agora, não entendi o seguinte trecho:
c.weightx = (i % 2 == 1 ? 5.0 : 4.0 );
c.weighty = (j % 2 == 1 ? 5.0 : 4.0 );
Porque esses valores? Eu testei simplesmente com 1 e funcionou.
[]'s
Estes valores são um tipo de influenciador no tamanho das celula em relação ao tamanho das outras celulas.
EX:
c.weightx = 10
…trecho 1
c.weightx = 20
…trecho 2
o componente q for adicionado no trecho1 terá medade do tamanho do componente que for adicionado no trecho 2…
o que eu fiz foi dar um preferencia maior para as celulas impares…
Se não entender pergunte novamente…