/ / java como definir o texto de um rótulo em um JFRAME (formulário pai), de um JPANEL (formulário filho) - java, swing, construtor, jframe, jpanel

java como definir o texto de um rótulo em um JFRAME (formulário pai), a partir de um JPANEL (formulário filho) - java, swing, construtor, jframe, jpanel

Isso é melhor, eu acho. por que o texto do rótulo não está mudando? A classe principal está no formato NewJFrame

public class NewJFrame extends javax.swing.JFrame {
public NewJFrame() {
initComponents();
NewJPanel jpanel = new NewJPanel();
anotherPanel.add(jpanel);
//there is also a label in this frame outside of the anotherPanel
}
}

Este é um formulário JPanel. Estou adicionando este jpanel em NewJFrame (anotherPanel)

public class NewJPanel extends javax.swing.JPanel {
public NewJFrame newJFrame;
public NewJPanel() {
initComponents();
this.setSize(200, 200);
//there is a button here
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
this.newJFrame = newJFrame;
newJFrame.jLabel1.setText("Need To change the text from here"); // this is not working, text is not changing
}
}

Respostas:

2 para resposta № 1

Seu problema é que, no seu código JPanel, você está criando um novo objeto JFrame completamente diferente do JFrame que está sendo exibido aqui:

public NewJPanel() {
NewJFrame newfr = NewJFrame();  // *** here ***

portanto, chamar os métodos NewJFrame ou definir seus campos não terá efeito visível na GUI visualizada.

Para resolver isso, você deve chamar métodos de uma maneira viável.referência à classe que comportamento você deseja alterar, aqui a classe NewJFrame. Portanto, você deve passar uma referência dessa classe para sua classe NewJPanel, talvez em seu construtor, para que a classe NewJPanel possa chamar métodos no objeto NewJFrame que está realmente sendo exibido.

Por exemplo:

public class NewJPanel extends javax.swing.JPanel {
private NewJFrame newJFrame;

// pass in the current displayed NewJFrame reference when calling this constructor
public NewJPanel(NewJFrame newJFrame) {
this.newJFrame = newJFrame;
newJFrame.setMyLabelText("qqqqqq");
}
}

Em seguida, na classe NewJFrame, você passa uma referência para this, o objeto JFrame visualizado:

public NewJFrame() {
NewJPanel pane= new NewJPanel(this);

A linha inferior aqui é nem sequer pensar nestescaras como ou JFrames ou JPanels. Pense neles como objetos de classes que precisam se comunicar, e isso geralmente é feito através de métodos públicos. Não é diferente para GUIs, pois é para programas não GUI.