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 № 1Seu 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.