Eaê, galera!
Estou criando um JComponent personalizado. Nesse componente, adiciono uma borda escrita por mim, que está funcionando perfeitamente bem, e um JScrollPane, com um JPanel dentro. O problema é que usei o GridBagLayout para ocupar ao máximo o espaço disponível mas, mesmo assim, o JScrollPane fica minúsculo na tela. O que pode estar acontecendo? Abaixo segue o código, com os métodos que tratam exclusivamente da interface:
public class VarFile extends JComponent {
/* ... */
public VarFile(String nome, Variavel tipo){
if(nome == null){
throw new IllegalArgumentException("Nome inválido!");
}
if(tipo == null){
throw new IllegalArgumentException("Tipo inválido");
}
this.nome = nome;
this.titulo = this.nome;
this.tipo = tipo;
borda = new FileBorder(titulo);
super.setBorder(borda);
this.file = null;
this.buffer = new ArrayList<Variavel>();
this.janelas = new ArrayList<Janela>();
layout = new GridBagLayout();
initialize();
construirGB();
}
/* ... */
public Border getBorder(){
return borda;
}
public void setBorder(Border border){}
public Dimension getMinimumSize(){
Insets ins = getInsets();
Dimension ms = tipo.getMinimumSize();
int largura = ms.width * (buffer.size() == 0 ? 1 : buffer.size()) + ins.left + ins.right;
int altura = ms.height + ins.top + ins.left;
return new Dimension(largura, altura);
}
public Dimension getMaximumSize(){
Dimension d = getMinimumSize();
return new Dimension(d.width * 10, d.height * 10);
}
public Dimension getPreferredSize(){
return getMaximumSize();
}
public void finalize(){
try{
close();
}catch(Exception e){}
}
private void initialize(){
setBackground(Color.white);
setLayout(new GridBagLayout());
GridBagConstraints temp = new GridBagConstraints();
temp.anchor = GridBagConstraints.NORTHWEST;
temp.fill = GridBagConstraints.BOTH;
temp.weightx = temp.weighty = 1.0;
add(getSpPrincipal(), temp);
}
private JScrollPane getSpPrincipal(){
if(spPrincipal == null){
spPrincipal = new JScrollPane(getPVisualizacao(), JScrollPane.VERTICAL_SCROLLBAR_NEVER, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
}
return spPrincipal;
}
private JPanel getPVisualizacao(){
if(pVisualizacao == null){
pVisualizacao = new JPanel();
pVisualizacao.setLayout(layout);
}
return pVisualizacao;
}
Obrigado pela atenção!