Inserindo painel em janela já aberta

7 respostas
E

Pessoal, dúvida cruel:

precisamos, em uma aplicação, alterar um componente da interface em tempo de execução. Por exemplo, quando abrir um arquivo, abrir, no centro da tela, um painel para exibir esse arquivo.

O problema é que, mesmo inserindo o componente e chamando revalidate, validate, pack, repaint, paintImmediatly, o troço não aparece de jeito nenhum!!!

Aí estão os fragmentos de código interessantes para o problema:
No construtor:

left_center_split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
left_center_split.setOneTouchExpandable(true);
left_center_split.add(navigation_view);
		
getContentPane().setLayout(new BorderLayout());
getContentPane().add(toolbar,BorderLayout.PAGE_START);
getContentPane().add(left_center_split,BorderLayout.CENTER);
getContentPane().add(status,BorderLayout.SOUTH);

Para mostrar o novo painel:

public void setCenter(UIView view) {
  if (center_view != null)
    left_center_split.remove(center_view);
		
  left_center_split.setRightComponent(view);

  if (center_view == null) 
    getContentPane().add(left_center_split,BorderLayout.CENTER);
		
  center_view = view;
  validate();
}

O novo painel (view) não aparece…no debug é possível verificar que seu tamanho é (0,0), mas, mesmo dando um setSize para uma dimensão qualquer, o painel não aparece… ah é, e já testamos sem SplitPane também…mesma coisa!

socorro! :shock:

[]'s

7 Respostas

brlima

Hmm… Olha esse codigo aqui. Eu alterei pra incluir um ScrollPane com um TextArea, e deu certo… alterei essa parte

Codigo completo

public void mouseClicked(MouseEvent e) {
				if(e.getClickCount() >= 2){
					System.out.println("Width  => " + panel1.getWidth());
					System.out.println("Height => " + panel1.getHeight());
					panel1.setLayout(new BorderLayout());
					panel1.add(new JScrollPane(new JTextArea("Teste...")), BorderLayout.CENTER);
					panel1.revalidate();
					
				}
			}
E

Tentei aqui colocando um novo Layout onde o componente vai ser inserido e ficou a mesma coisa de antes…o novo componente não recebe tamanho nenhum :frowning:

brlima

Alguma coisa ta errada no seu codigo… Aqui q vc postou nao consegui ter nenhuma ideia do que pode ser… :S

E

Imagino que seja problema de layout…a primeira vez que o layout é executado, ainda não tem um componente na parte direita do split pane…ele é adicionado logo depois, mas aí o layout já foi executado.

O problema é que, mesmo colocando um tamanho qualquer pra esse componente na marra, ele não aparece!

brlima

O tamanho so vai valer se vc estiver usando o layout nulo. O preferredSize é usado quando vc usa o borderlayout e joga em outros cantos, senao o centro. Quando vc joga no centro, ele assumi o tamanho todo do cara.

E

Verdade, verdade, verdade… :oops:

O problema é que o componente que eu queria inserir estava dentro de outro painel, e esse painel não tinha layout definidio, mas mesmo assim eu assumia que era BorderLayout na hora de inserir o componente.

Foi só usar o setLayout e deu tudo certinho :roll:

Brigadão

brlima

Huahuahaauhau… :smiley:
Eh que pra mim eh automatico usar o setLayout :smiley:
E realmente, fora o contentPane, que por default eh o Border, o JPanel vc tem q setar o laytou… heheheheh

Flw!!!

Criado 29 de junho de 2004
Ultima resposta 29 de jun. de 2004
Respostas 7
Participantes 2