Sprawdzanie czy pole tekstowe jest puste

0

Prośba o podpowiedź co robię źle. W skrócie - programik ma informować jeśli pole tekstowe (w tym przypadku Pole6) jest puste. Jeśli if i else if są w tej kolejności - program nie działa poprawnie, jeśli zmienię kolejność - działa. Dlaczego?


public class test1 extends JFrame implements ActionListener
{ 
	JTextField Pole1, Pole2, Pole3, Pole4, Pole5, Pole6;
	JTextArea notatnik;
	JButton przycisk_SprawdzZawartosc, przycisk_WyczyscPola, przycisk_WyczyscNotatnik;
	JLabel lLabelPole1, lLabelPole2, lLabelPole3, lLabelPole4, lLabelPole5, lLabelPole6;
	String zawartosc_Pole1, zawartosc_Pole2, zawartosc_Pole3, zawartosc_Pole4, zawartosc_Pole5, zawartosc_Pole6;
	       
	
	public test1()
	{  	
		setSize(1000,500);
		setTitle("Test");
		setLayout(null);
		
		notatnik = new JTextArea();
		JScrollPane przewijalnePole = new JScrollPane(notatnik);
		przewijalnePole.setBounds(50,200,1340,620);
		add(przewijalnePole);	
				
		Pole1 = new JTextField("");
		Pole1.setBounds(50,50,150,30);
		Pole1.setFont(new Font("Arial", Font.PLAIN, 15));
		add(Pole1);
		
		lLabelPole1 = new JLabel("Pole1");
		lLabelPole1.setBounds(100,10,400,50);
		add(lLabelPole1);
				
		Pole2 = new JTextField("");
		Pole2.setBounds(250,50,150,30);
		Pole2.setFont(new Font("Arial", Font.PLAIN, 15));
		add(Pole2);
		
		lLabelPole2 = new JLabel("Pole2");
		lLabelPole2.setBounds(300,10,400,50);
		add(lLabelPole2);
		
		Pole3 = new JTextField("");
		Pole3.setBounds(450,50,150,30);
		Pole3.setFont(new Font("Arial", Font.PLAIN, 15));
		add(Pole3);
		
		lLabelPole3 = new JLabel("Pole3");
		lLabelPole3.setBounds(500,10,400,50);
		add(lLabelPole3);
		
		Pole4 = new JTextField("");
		Pole4.setBounds(50,120,150,30);
		Pole4.setFont(new Font("Arial", Font.PLAIN, 15));
		add(Pole4);
		
		lLabelPole4 = new JLabel("Pole4");
		lLabelPole4.setBounds(100,80,400,50);
		add(lLabelPole4);
		
		Pole5 = new JTextField("");
		Pole5.setBounds(250,120,150,30);
		Pole5.setFont(new Font("Arial", Font.PLAIN, 15));
		add(Pole5);
		
		lLabelPole5 = new JLabel("Pole5");
		lLabelPole5.setBounds(300,80,400,50);
		add(lLabelPole5);
		
		Pole6 = new JTextField("");
		Pole6.setBounds(450,120,150,30);
		Pole6.setFont(new Font("Arial", Font.PLAIN, 15));
		add(Pole6);
		
		lLabelPole6 = new JLabel("Pole6");
		lLabelPole6.setBounds(500,80,400,50);
		add(lLabelPole6);
				
		przycisk_SprawdzZawartosc = new JButton ("SPRAWDŹ ZAWARTOŚĆ");
		przycisk_SprawdzZawartosc.setBounds(650,80,175,40);
		add(przycisk_SprawdzZawartosc);
		przycisk_SprawdzZawartosc.addActionListener(this);
		
		przycisk_WyczyscPola = new JButton ("WYCZYŚĆ POLA");
		przycisk_WyczyscPola.setBounds(880,40,160,40);
		add(przycisk_WyczyscPola);
		przycisk_WyczyscPola.addActionListener(this);
		
		przycisk_WyczyscNotatnik = new JButton ("WYCZYŚĆ WYNIKI");
		przycisk_WyczyscNotatnik.setBounds(880,120,160,40);
		add(przycisk_WyczyscNotatnik);
		przycisk_WyczyscNotatnik.addActionListener(this);
				
		Pole1.addActionListener(this);
		Pole2.addActionListener(this);
		Pole3.addActionListener(this);
		Pole4.addActionListener(this);
		Pole5.addActionListener(this);
		Pole6.addActionListener(this);		
	} 
	
		
	public static void main(String[] args) throws IOException 
	{ 
		test1 aplikacja = new test1();
		aplikacja.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		aplikacja.setExtendedState(JFrame.MAXIMIZED_BOTH);
		aplikacja.setVisible(true);			
	} 
	

	@Override
	public void actionPerformed(ActionEvent e)
	{ 
	
		Object source = e.getSource();
	
		
		if (source == przycisk_SprawdzZawartosc)
		{ 
			zawartosc_Pole1 = Pole1.getText();
			zawartosc_Pole2 = Pole2.getText();
			zawartosc_Pole3 = Pole3.getText();
			zawartosc_Pole4 = Pole4.getText();
			zawartosc_Pole5 = Pole5.getText();
			zawartosc_Pole6 = Pole6.getText();
			
			
		    if (zawartosc_Pole1 != ("") & zawartosc_Pole2 != ("") & zawartosc_Pole3 != ("") & zawartosc_Pole4 != ("") & zawartosc_Pole5 != ("") & zawartosc_Pole6 != (""))
			{ 
			   notatnik.append("\n\n" + "Wszystkie pola są pełne" + "\n\n");
			}
				
		    else if (zawartosc_Pole1 != ("") & zawartosc_Pole2 != ("") & zawartosc_Pole3 != ("") & zawartosc_Pole4 != ("") & zawartosc_Pole5 != ("") & zawartosc_Pole6.equals(""))
			{ 
			   notatnik.append("\n\n" + "Pole6 jest puste" + "\n\n");
			} 

	     } 

		
  else if (source == przycisk_WyczyscPola)
	{ 
	  Pole1.setText("");
	  Pole2.setText("");
	  Pole3.setText("");
	  Pole4.setText("");
	  Pole5.setText("");
	  Pole6.setText("");  
    } 

		
  else if (source == przycisk_WyczyscNotatnik)
 	{ 
 	  notatnik.setText("");  
    } 
		
			
 } 
		
	public JButton getprzycisk_SprawdzZawartosc() 
	{
		return przycisk_SprawdzZawartosc;
	}
	
	public JButton getprzycisk_WyczyscPola() 
	{
		return przycisk_WyczyscPola;
	}
	
	public JButton getprzycisk_WyczyscNotatnik() 
	{
		return przycisk_WyczyscNotatnik;
	}
	

	public void setprzycisk_SprawdzZawartosc(JButton przycisk_SprawdzZawartosc) 
	{
		this.przycisk_SprawdzZawartosc = przycisk_SprawdzZawartosc;
	}
	
	public void setprzycisk_WyczyscPola(JButton przycisk_WyczyscPola) 
	{
		this.przycisk_WyczyscPola = przycisk_WyczyscPola;
	}
	
	public void setprzycisk_WyczyscNotatnik(JButton przycisk_WyczyscNotatnik) 
	{
		this.przycisk_WyczyscNotatnik = przycisk_WyczyscNotatnik;
	}
		
} 

0

Czy jest puste sprawdzaj za pomocą equals a nie !=.
Jesteś pewien, że chciałeś użyć & zamiast &&?

0

Czemu nie używasz tablic? Wtedy uniknąłbyś pisania kodu takiego jak ten

        Pole1.addActionListener(this);
        Pole2.addActionListener(this);
        Pole3.addActionListener(this);
        Pole4.addActionListener(this);
        Pole5.addActionListener(this);
        Pole6.addActionListener(this);  
2

Do sprawdzenia czy pole jest puste użyj metody isEmpty(). I, jak pisał poprzednik, koniecznie skorzystaj z tablic.

0

szweszwe - nie, nie byłem pewien. Dzięki.

O tablicach muszę jeszcze poczytać (za chwilę), jak używać ich w takich przypadkach.
Odnośnie sprawdzania czy pole jest puste. Chodzi mi o to, żeby wykonywał się inny kod w przypadku, gdy np. pięć pierwszych pól jest wypełnionych i szóste puste, a inny w przypadku, gdy np. drugie pole jest puste i pozostałe wypełnione.
Korzystając z isEmpty() muszę chyba dopisywać ==false, jeśli pole ma być wypełnione?

if (zawartosc_Pole1.isEmpty()==false && zawartosc_Pole2.isEmpty()==false && zawartosc_Pole3.isEmpty()==false && zawartosc_Pole4.isEmpty()==false && zawartosc_Pole5.isEmpty()==false && zawartosc_Pole6.isEmpty()==false)
{ 
   notatnik.append("\n\n" + "Wszystkie pola są pełne" + "\n\n");
}
		
else if (zawartosc_Pole1.isEmpty()==false && zawartosc_Pole2.isEmpty()==false && zawartosc_Pole3.isEmpty()==false && zawartosc_Pole4.isEmpty()==false && zawartosc_Pole5.isEmpty()==false && zawartosc_Pole6.isEmpty())
{ 
   notatnik.append("\n\n" + "Pole6 jest puste" + "\n\n");
} 
0

Nie musisz, użyj operatora negacji !:

if (!zawartosc_Pole1.isEmpty() && !zawartosc_Pole2.isEmpty() && !zawartosc_Pole3.isEmpty() && !zawartosc_Pole4.isEmpty() && !zawartosc_Pole5.isEmpty() && !zawartosc_Pole6.isEmpty())
0

Czytam o tablicach, ale znajduję tylko porady, jak je stworzyć i jak wyświetlić ich zawartość. W jaki sposób mogę je wykorzystać przy dodawaniu ActionListener do pól tekstowych.

Mam:

String[] pola = {"Pole_Pion1", "Pole_Pion2", "Pole_Pion3", "Pole_Poziom1", "Pole_Poziom2", "Pole_Poziom3"};

I co dalej?

Poprawka. W tym przypadku miało być: Pole1, Pole2, itd.

0
JTextField[6] pola = new JTextField[6];
...
Font f = new Font("Arial", Font.PLAIN, 15);
for(int i=0;i<6;i++)
{
    pola[i] = new JTextField("")
    pola[i].setBounds(50+200*i,50,150,30);
    pola[i].setFont(f);
    pola[i].addActionListener{this);
    add(pola[i]);
}

Potem, np tak:

boolean filled = true;
for(int i=0;i<6;i++)
{
    filled = filled && !pola[i].getText().isEmpty();
}
if (filled)
{ 
   notatnik.append("\n\n" + "Wszystkie pola są pełne" + "\n\n");
}

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