Aktywność Buttona ustawiana z Nowej Klasy

0

Próbowałem zrobić zadanie, w którym na formatce mam 3 jTextField'y i Button. Stworzona nowa klasa ma implementować DocumentListener. Aplikacja ma ustawiać Button nieaktywny, gdy chociaż jedno pole tekstowe jest puste.
W metodzie insertUpdate chciałem napisać, że gdy długość pola tekstowego jest różna od zera to aktywność Buttona jest ustawiona na true. I tu się robi problem, bo nie wiem czemu Button z klasy main nie pobiera tych wartości z tej NowejKlasy.
Proszę o podpowiedź.

Zawartość konstruktora w klasie main:

public trening() {
        initComponents();
        
        HashMap<Integer, JTextField> jTexty = new HashMap<Integer, JTextField>();
        jTexty.put(1, jTextField1);
        jTexty.put(2, jTextField2);
        jTexty.put(3, jTextField3);
        
        for(JTextField jTF : jTexty.values())
        {
            jTF.getDocument().addDocumentListener(new NowaKlasa(jTF));
        }
        
        NowaKlasa nk = new NowaKlasa(jButton1);
        this.jButton1.setEnabled(nk.getButtonEnabled());
    }

Zawartość klasy z DocumentListener'em

public class NowaKlasa implements DocumentListener
{
    private JTextField jText;
    private JButton but1 = new JButton();  
    private static boolean a = false;
    
    public NowaKlasa(JTextField jTextField)
    {
        this.jText = jTextField;
    }
    
    public void setButtonEnabled(boolean a)
    {
        this.a = a;        
    }
    
    public boolean getButtonEnabled()
    {
        return a;
    }
    
    public NowaKlasa(JButton jBut1)
    {
        this.but1 = jBut1;
    }
    
    
    @Override
    public void insertUpdate(DocumentEvent e) 
    {
        Runnable r = new Runnable() 
        {
            @Override
            public void run()   
            {              
                if(jText.getText().trim().length() == 0)
                { 
                    System.out.println("Pusto"); 
                    setButtonEnabled(false); 
                    
                }
                else
                {
                    System.out.println("insertUpdate");
                    setButtonEnabled(true); 
                }
            }
        };
        SwingUtilities.invokeLater(r);
    }

    @Override
    public void removeUpdate(DocumentEvent e) 
    {
        Runnable r = new Runnable() 
        {
            @Override
            public void run()   
            {              
                if(jText.getText().trim().length() == 0)
                { 
                    System.out.println("Pusto"); 
                    setButtonEnabled(false); 
                }
                else
                {
                    System.out.println("RemoveUpdate");
                    setButtonEnabled(true); 
                }
            }
        };
        SwingUtilities.invokeLater(r);
    }

    @Override
    public void changedUpdate(DocumentEvent e) 
    {
    }   
}
0

A który fragment kodu (poza konstruktorem) zmienia własność enabled dla jButton1?

0

Żaden. Podałem cały mój kod. Czyli konstruktor main klasy zmienia raz aktywność Buttona? To jak inaczej wywołać metodę getButtonEnabled() z NowejKlasy aby zmieniała mi aktywność tego Buttona?

0

Może tak (nie rozumiem dlaczego masz dwa konstruktiry w klasie NowaKlasa):

public class NowaKlasa implements DocumentListener
{
    private JTextField jText;
    private JButton but1 ;  
    //private static boolean a = false;
 
    public NowaKlasa(JTextField jTextField)
    {
        this.jText = jTextField;
    }
 
 
    public NowaKlasa(JButton jBut1)
    {
        this.but1 = jBut1;
    }
 
 
    @Override
    public void insertUpdate(DocumentEvent e) 
    {
        Runnable r = new Runnable() 
        {
            @Override
            public void run()   
            {              
                if(jText.getText().trim().length() == 0)
                { 
                    System.out.println("Pusto"); 
                    jBut1.setEnabled(false); 
 
                }
                ...
    }
0

Próbowałem w ten sposób tylko jak w klasie main zrobić uchwyt do buttona z NowejKlasy?
Bo wcześniej mogłem wywołać metodę getButtonEnabled

this.jButton1.setEnabled(nk.getButtonEnabled());
0
public class NowaKlasa implements DocumentListener
{
    private JTextField jText;
    private JButton butonZKlasyMain;
    private JButton but1=new JButton();  
    //private static boolean a = false;
 
    public NowaKlasa(JTextField jTextField)
    {
        this.jText = jTextField;
    }
 
 
    public NowaKlasa(JButton jBut1)
    {
        butonZKlasyMain = jBut1;
    }

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