komunikacja między ramkami JAVA

0

Witam,

mam zalozmy ramke1, gdzie jest imie oraz obok mam button "zmien imie", button wywoluje ramke2, w której mamy textboxa do wpisania nowego imienia oraz button, ktorym chcialbym zmienic wartosc pola imie z ramki1

cos na styl w ramce2 imie.setText("cos_wpisane"); gdzie imie jest z ramki1 jak sie moge odwolac do ramki1 ?

0

Najpopularniejsze pytanie, przejrzyj forum.

0

nakieruj mnie na slowa kluczowe, podeslij link do wątku ... szukalem i nic dla siebie nie znalazlem

0

stwórz metodę w Ramka1 która będzie zmieniała imię np:

public void setImie(string imie){
   this.imie=imie;
}

a później w ActionListener drugiego Button'a ustawiasz:

Ramka1.setImie(textBox.getText());
0

no ok wyglada to dobrze, tylko podpowiedz mi teraz co poradzic na problem:

jesli mam w drugiej ramce wywolanie metody z pierwszej tak jak zailustrowales to pojawia mi sie "non-static method cannot be accessed from a static context".

0

Zapewne wywołujesz metodę (która nie jest static) drugiej klasy w metodzie main pierwszej klasy (która jest zawsze static). Tak nie można.

0

a wiec tak zrobilem w NetBeansie automatem

w ramce1 pola:

-label (o nazwie "imie")
-button (o nazwie "edytuj imie")

w ramce2 pola:
-jTextField (o nazwie jTextField1)
-button (o nazwie "zatwierdz nowe imie")

wszystko zrobilem automatem ... wiec nie wiem dlaczego edytor narzuca mi tutaj ze przypisanie jest statyczne z niestatycznym. Niektorych rzeczy w kodzie nie moge zmienic, gdyz sa poblokowane przez tworzenie ich automatem. Chyba takie zabezpieczenie by laik nic nie popsul. I teraz nie gdzie to moge zmienic by bylo to ujednolicone i nie bylo konfliktu.

0

wrzuć kod gdzie masz zdefiniowane te kontrolki

0

Ramka nr 1:

 import javax.swing.JFrame;
public class NewJFrame extends javax.swing.JFrame {

    /** Creates new form NewJFrame */
    public void nazwaFirmy(String zmienna) {
        jLabel2.setText(zmienna);
    }
    public NewJFrame() {
        initComponents();
    }
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jButton1 = new javax.swing.JButton();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jButton1.setText("Edytuj");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jLabel1.setText("Twoje imie to:");

        jLabel2.setText("<< wpisz imie >>");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, 156, Short.MAX_VALUE)
                .addGap(84, 84, 84)
                .addComponent(jButton1)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton1)
                    .addComponent(jLabel1)
                    .addComponent(jLabel2))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        editFrame ET = new editFrame();
        ET.setVisible(true);
        ET.setLocationRelativeTo(null);
        ET.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new NewJFrame().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    // End of variables declaration
}

oraz ramka nr 2:

 public class editFrame extends javax.swing.JFrame {

    /** Creates new form editFrame */
    public editFrame() {
        initComponents();
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jTextField1 = new javax.swing.JTextField();
        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jButton1.setText("zatwierdz");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 271, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, 99, Short.MAX_VALUE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jButton1))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        NewJFrame.nazwaFirmy(jLabel2.getText()); <----------------------------tu erorr non-static nie moze byc ze static
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new editFrame().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    private javax.swing.JTextField jTextField1;
    // End of variables declaration
}
0

We wskazanym miejscu przed kropką musi być nazwa obiektu (zmiennej), a nie nazwa klasy.

  1. w kodzie klasy NewJFrame zmień metodę:
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        editFrame ET = new editFrame(this);
        ET.setVisible(true);
        ET.setLocationRelativeTo(null);
        ET.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    }
  1. w klasie editFrame dodaj pole i zmień konstruktor:
    private javax.swing.JButton jButton1;
    private javax.swing.JTextField jTextField1;
    private NewJFrame mainWindow;
    ...
    public editFrame(NewJFrame mainWindow) {
        this.mainWindow=mainWindow;
        initComponents();
    }
  1. Zmień wiersz z błędem:
mainWindow.nazwaFirmy(jLabel2.getText());
0

Koniecznych zmian jest więcej. (Ciężko się patrzy w kod wygenerowany przez NetBeans, ja mam odruchy wymiotne).
4. wiersz z błędem trzeba chyba zmienić na taki:

mainWindow.nazwaFirmy(jTextField1.getText());
  1. w klasie NewJFrame dodaj pole
    private NewJFrame okno;
  1. konstruktor zmień:
    public NewJFrame() {
        okno=this;
        initComponents();
    }
  1. zmień metodę:
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        editFrame ET = new editFrame(okno);
        ET.setVisible(true);
        ET.setLocationRelativeTo(null);
        ET.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    }

Jeżeli dwie klasy mają współpracować (wymieniać dane), to co najmniej jedna z nich musi przechowywać referencję do drugiej. W tym przykładzie jest to referencja (w klasie editFrame) mainWindow do obiektu klasy NewJFrame.

0

ok spróbuje, a powiedz mi jak moge zmienic np metode private ActionListener na PUBLIC w NetBeansie cokolwiek zrobie to narzuca mi pewien schemat i nie moge tego recznie wyedytowac ... wczoraj jeszcze dwie godziny siedziałęm nad wprowadzaniem MASKI dla jTextField i znalazlem opcje w google: "JFormattedTextField" niestety w NetBeansie nie moge kontrolki sobie tak z palca dodac nie wiem jak to zrobic ... świeżakuje w tym i jest tyle trudnosci :/

a z tematem poradzilem sobie tak
Frame One:

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        ramka1 ET = new ramka1();
        ET.parent = this;
        ET.setVisible(true);
        ET.setLocationRelativeTo(null);
        ET.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    }  

oraz edit1:

public class ramka1 extends javax.swing.JFrame {

public FrameOne parent;
    /** Creates new form ramka1 */
    public ramka1() {
        initComponents();
    }
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jTextField1 = new javax.swing.JTextField();
        jLabel1 = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jLabel1.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        jLabel1.setText("Wprowadź nazwę firmy:");

        jButton1.setText("Zawierdź nową nazwę firmy");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE)
                    .addComponent(jLabel1)
                    .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jButton1)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                        

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
      String str = jTextField1.getText();
      parent.nazwaFirmy(str);
      jTextField1.setText("");
      jLabel1.setText("Wprowadź nową nazwę firmy: NAZWA WPROWADZONA !!");
      JOptionPane.showMessageDialog(null, "Dane zostały zaktualizowane !");
    }                                        

    /**
     * @para 
0

Z mojej uwagi o odruchu wymiotnym powinieneś się domyślić, że nawet groźba tortur nie zmusiła by mnie do użycia graficznego projektanta formularzy z NB. Nic Ci w tej sprawie nie poradzę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1