Wątek przeniesiony 2015-01-14 07:19 z Java przez bogdans.

Widoczność TextArea

0

Tworzę program w netbeans używając kreatora. Okienkowa aplikacja Java JFrame Form.
Próbuję zaktualizować jTextArea z innej klasy ale TextArea nie jest widoczna tej klasie.

private void initComponents() 

mam "wyszarzone" i tu nie moge nic zmienić.

Jak zrobić aby można było aktualizować treść TextArea z innych klas?

0
  1. Najprościej zrobić akcesory do pola textarea
  2. Powinieneś mieć model, w którym byłoby pole typu String i to pole aktualizować a panel powinien byc listenerem na zmiany w modelu. MVC się kłania :)
0

initComponent jest na szaro, bo budowałeś GUI przez Netbeansa GUI przez kreatora, a nie ręcznie. Jeśli chcesz zmieniać text w JTextArena to wystarczy odwoływać poprzez utworzenie nowej metody i z poziomu drugiej klasy wywołujesz tą metodę.

0
package area;
public class Area extends javax.swing.JFrame {
    public Area() {
        initComponents();
        wstawtext wstaw = new wstawtext(); wstaw.wstaw();
    }
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jTextArea1.setColumns(20);
        jTextArea1.setRows(5);
        jScrollPane1.setViewportView(jTextArea1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 151, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 149, Short.MAX_VALUE))
        );

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

    public static void main(String args[]) {

        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(Area.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(Area.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(Area.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(Area.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }

        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Area().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify                     
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextArea jTextArea1;
    // End of variables declaration                   
}// ********** jak przeniosę ten nawias na sam dół to działa czyli jak klasa **wstawtekst** jest podklasą klasy **Area**

class wstawtext {
    void wstaw(){
        jTextArea1.append("przykladowy tekst");
    }
}
 

Czy może mógłby ktoś przerobić ten przykład tak żeby zadziałało.

0
public class Test extends javax.swing.JFrame {

    public Test() {
        initComponents();
        wstaw();
    }

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

        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jTextArea1.setColumns(20);
        jTextArea1.setRows(5);
        jScrollPane1.setViewportView(jTextArea1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                        .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 151, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(0, 149, Short.MAX_VALUE))
        );

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

    public static void main(String args[]) {

        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Test().setVisible(true);
            }
        });
    }
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextArea jTextArea1;

    public void wstaw() {
        jTextArea1.append("przykladowy tekst");
    }
}
0

Wielkie dzięki za pomoc ale nie o to mi chodziło, przedstawię problem trochę inaczej.
Docelowo to nie ma się uruchamiać za pomocą: initComponents();
tylko przy użyciu przycisku

public class Test extends javax.swing.JFrame {
    public Test() {
        initComponents();
    } 
    @SuppressWarnings("unchecked")                      
    private void initComponents() {//###wyciałem ten fragment kodu żeby łatwiej się czytało ####
    }                       

    public static void main(String args[]) {
 
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Test().setVisible(true);
            }
        });
    }
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextArea jTextArea1;
 
    
  private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    DzialanieButton1 b1= new DzialanieButton1();
    b1.wykonajB1();
    } 
  private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    DzialanieButton2 b2= new DzialanieButton2();
    b2.wykonajB2();       
    } 
    public void wstaw(String text) {
        jTextArea1.append(text);
    }
}
// klasa ta ma być w oddzielnym pliku
public class DzialanieButton1{
    void wykonajB1(){
       // i tutaj szereg działań które mają zostać wykonane po naciśnięciu przycisku...
       // działania dają rezultat który zapisujemy w zmiennej string
        String wynik= "rezultat dzialan";
        Test butt1= new Test();
        butt1.wstaw(wynik);
    }
}
public class DzialanieButton2{
    void wykonajB2(){
        //szereg działań
        String wynik= "rezultat dzialan";
        Test butt2= new Test();
        butt2.wstaw(wynik);
    }
}
 
1

Moim zdaniem, wymyślamy coś naokoło :)

class DzialanieButton1{
    private Test test; // zmien ta nazwe test (wiem że jest ode mnie:))
    
public DzialanieButton1(Test test) {
        this.test = test;//działaj na przekazanej referencji a nie na nowym obiekcie
    }
    
    void wykonajB1(){
        String wynik= "rezultat dzialan";
//tu nie twórz nowego obiektu test
        test.wstaw(wynik);
    }
}
0

Wielkie dzięki, jutro się tym pobawię i spróbuje podłączyć, dziś już zmykam spać.

0

Sorki ale nie umiem odpalic metody za pomocą przycisku.
Kilka godzin walczę.

chodzi mi o uruchomienie metody wykonajB1
przy użyciu przycisku jButton1ActionPerformed

Jak byś mógł jeszcze podpowiedzieć jak to zrobić :)

package test;
public class Test extends javax.swing.JFrame {
    public Test() {
        initComponents();
     
    }
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();
        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jTextArea1.setColumns(20);
        jTextArea1.setRows(5);
        jScrollPane1.setViewportView(jTextArea1);

        jButton1.setText("jButton1");
        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)
            .addComponent(jScrollPane1)
            .addGroup(layout.createSequentialGroup()
                .addGap(20, 20, 20)
                .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 152, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(228, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 184, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 35, Short.MAX_VALUE))
        );

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

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // Jak odpalić metodę "wykonajB1" z tego przycisku 
        
    }                                        
    public static void main(String args[]) {
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(Test.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(Test.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(Test.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(Test.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Test().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextArea jTextArea1;
    // End of variables declaration                   

  public void wstaw(String tekst) {
         jTextArea1.append("przykladowy tekst\n");
       jTextArea1.append(tekst+"\n");
    }
}
class DzialanieB{
    private Test test; // zmien ta nazwe test (wiem że jest ode mnie:))
public DzialanieB(Test test) {
        this.test = test;//działaj na przekazanej referencji a nie na nowym obiekcie
    }
    void wykonajB1(){
        String wynik= "rezultat dzialan";
//tu nie twórz nowego obiektu test
        test.wstaw(wynik);
    }
}

Musze poczytać o tych referencjach bo szczerze mówiąc nie orientuje się w nich.

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