cvfuhr
Maio 16, 2007, 3:46pm
#1
galera eh o seguinte…
tenho a classe Janela…
e tenho JanelaPais que extends de Janela
package janelas;
import javax.swing.;
import java.awt. ;
abstract class Janela extends JDialog {
private JPanel panel01 = new JPanel();
private JPanel panel02 = new JPanel();
private JPanel panel03 = new JPanel();
private JPanel panel04 = new JPanel();
private JPanel panel05 = new JPanel();
public void AddComponentes(){
panel01.setLayout(new GridLayout(1,1));
panel02.setLayout(new GridLayout(1,1));
panel03.setLayout(new GridLayout(1,1));
panel04.setLayout(new GridLayout(1,1));
panel05.setLayout(new GridLayout(1,1));
}
public void AddDirecao(){
getContentPane().setLayout(new BorderLayout());
getContentPane().add(panel01,BorderLayout.NORTH);
getContentPane().add(panel02,BorderLayout.CENTER);
getContentPane().add(panel03,BorderLayout.SOUTH);
getContentPane().add(panel04,BorderLayout.EAST);
getContentPane().add(panel05,BorderLayout.WEST);
}
}
package janelas;
import javax.swing.;
import java.awt. ;
import janelas.Janela;
public class JanelaPais extends Janela {
public void AddConfigura(){
panel01.add(new Label(“teste 1”)); //dá erro aqui
}
public void AddJanela(){
setTitle("Cadastro de Pais");
setSize(300,120);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
setLocation((d.width - 300) / 2,(d.height - 120) / 2);
setModal(true);
setResizable(false);
setVisible(true);
}
public JanelaPais() {
AddComponentes(); // extende-se da classe Janela
AddConfigura();
AddDirecao(); // extende-se da classe Janela
AddJanela();
}
}
toh tentando fazer uma janela padrão… e na janela filha somente alterar
o necessário para cada stuação…
tenho tbem uma classe JPanel… que eh a parte grafica da janela e preciso add nessa classe JanelaPais…
se alguem souber ai o caminho…
abraço
Você não pode adicionar com .add pois é private…
Até +.
cvfuhr
Maio 16, 2007, 4:33pm
#3
tah…
mas como faço isso funfa???
Cara mudei sua classe e dá uma olhada…acrescentei um método na Janela para inserir os JComponent…
Assim ela funcionou beleza…
Outra coisa procura indentar seu código…fica melhor para esudar ele…
import javax.swing.*;
import java.awt.*;
abstract class Janela extends JDialog {
private JPanel panel01 = new JPanel();
private JPanel panel02 = new JPanel();
private JPanel panel03 = new JPanel();
private JPanel panel04 = new JPanel();
private JPanel panel05 = new JPanel();
public void AddComponentes() {
panel01.setLayout(new GridLayout(1, 1));
panel02.setLayout(new GridLayout(1, 1));
panel03.setLayout(new GridLayout(1, 1));
panel04.setLayout(new GridLayout(1, 1));
panel05.setLayout(new GridLayout(1, 1));
}
public void AddDirecao() {
getContentPane().setLayout(new BorderLayout());
getContentPane().add(panel01, BorderLayout.NORTH);
getContentPane().add(panel02, BorderLayout.CENTER);
getContentPane().add(panel03, BorderLayout.SOUTH);
getContentPane().add(panel04, BorderLayout.EAST);
getContentPane().add(panel05, BorderLayout.WEST);
}
public void panel01(JComponent objeto){ //método panel01
panel01.add(objeto);
}
}
import javax.swing.*;
import java.awt.*;
public class JanelaPais extends Janela {
public void AddConfigura() {
panel01(new JLabel("TEXTO")); //chama método panel01
}
public void AddJanela() {
setTitle("Cadastro de Pais");
setSize(300, 120);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
setLocation((d.width - 300) / 2, (d.height - 120) / 2);
setModal(true);
setResizable(false);
setVisible(true);
}
public JanelaPais() {
AddComponentes(); // extende-se da classe Janela
AddConfigura();
AddDirecao(); // extende-se da classe Janela
AddJanela();
}
public static void main(String[] args) {
JanelaPais pais = new JanelaPais();
}
}
Até +.
Uma forma é vc implementar métodos na classe Janela que te possibilitem manipular esses componentes private do teu padrão por outras classe, por exemplo, a JanelaPais. Como o gil colocou.
Outra forma seria declarar seus componentes como protected e nao private , assim as classes que herdam de Janela teriam acesso a esses componentes diretamente!
Espero nao ter dito besteira e espero ter ajudado!!
E isto mesmo que o Marcio falou…implementa os métodos ou então declara suas variáveis protect que as classes filhas terão acesso…
Só que neste caso as classes do mesmo pacote também tem acesso além das classes filhas…
OK?
Deu para esclarecer?
Até +.
cvfuhr
Maio 16, 2007, 5:34pm
#7
sim sim…
soh uma coisa…
aqui tah passando uma JLabel…
panel01(new JLabel(“TEXTO”));
funciona tbem com JButton
panel01(new JButton(“TEXTO”));
queria saber se tem com com passar uma JPanel…
tenho um painel pronto com todos os campos do cadastro…
esse painel tem JButton e JTextFiel…
implementar dentro da classe janela…
valeu pelas respostas
abraço
Tem sim cara por isso coloquei o JComponent com parâmetro…
para que você possa passar um JPanel com o layout todo já definido dentro dele…
Ok?
Até +.
cvfuhr
Maio 16, 2007, 6:33pm
#9
agora consegui…
o problema não era em seu código…
minha JPane tava bugada e dava erro quando tentava passar…
valeu colega!!
tudo resolvido
abraço