Nieznikajacy label pomimo prawidłowej pętli

Nieznikajacy label pomimo prawidłowej pętli
SM
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2
0

czesc koledzy z forum 4programmers, mam taki problem, ze po dodaniu paru przedmiotow a pozniej probie ich usuniecia(na razie tylko wyspacjowanie tresci labela) usuwa tylko ostatni label, chociaz petla jest od poczatku do konca, sprawdzilem i w konsoli pokazuje mi ze labale sa wyspacjowane a jednak w oknie w labalu dalej jest tresc, probowalem repaintowac itd i nic :( nie rozumiem jak w jednej i tej samej petli moze wykonac sie tak jakby tylko dla ostatniego labala na liscie, licze na wasza pomoc!

Kopiuj
package siamicio;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JTextField;


public class okno extends JFrame implements ActionListener{
	ArrayList<Przedmiot> lista = new ArrayList<Przedmiot>();
	ArrayList<JCheckBox> chbx = new ArrayList<JCheckBox>();
	ArrayList<JLabel> llNazwa = new ArrayList<JLabel>();
	ArrayList<JLabel> llOcena = new ArrayList<JLabel>();
	ArrayList<JLabel> llEcts = new ArrayList<JLabel>();
	JLabel lNazwa, lOcena, lEcts, lWynik;
	JButton bDodaj, bUsun, bZakoncz, bOblicz;
	JTextField tNazwa, tOcena, tEcts;
	
	static okno aplikacja;
	JMenuBar pasek;
	JMenu menuPlik;
	JMenuItem mOtworz, mZapisz, mWyjscie;
	
	
public okno()
{
	pasek = new JMenuBar();
	menuPlik= new JMenu("Plik");
	setJMenuBar(pasek);
	pasek.add(menuPlik);
	mOtworz = new JMenuItem("Otworz");
	mZapisz = new JMenuItem("Zapisz");
	mWyjscie = new JMenuItem("Wyjscie");
	menuPlik.add(mZapisz);
	menuPlik.add(mOtworz);
	menuPlik.addSeparator();
	menuPlik.add(mWyjscie);
	mZapisz.addActionListener(this);
	mOtworz.addActionListener(this);
	mWyjscie.addActionListener(this);
	setSize(700,500);
	setTitle("Srednia");
	setLayout(null);
	tOcena = new JTextField("");
	tNazwa = new JTextField("");
	tEcts = new JTextField("");
	tNazwa.setBounds(50,100,100,20);
	tOcena.setBounds(200,100,100,20);
	tEcts.setBounds(350,100,100,20);
	add(tOcena);
	add(tNazwa);
	add(tEcts);
	lOcena = new JLabel("Ocena");
	lNazwa = new JLabel("Nazwa");
	lEcts = new JLabel("Ects");
	lWynik = new JLabel("Srednia:");
	lNazwa.setBounds(50,70,100,20);
	lOcena.setBounds(200,70,100,20);
	lEcts.setBounds(350,70,100,20);
	lWynik.setBounds(500,70,100,20);
	add(lOcena);
	add(lNazwa);
	add(lEcts);
	add(lWynik);
	bDodaj = new JButton("Dodaj");
	bDodaj.setBounds(20, 400, 100, 50);
	bUsun = new JButton("Usun");
	bUsun.setBounds(170, 400, 100, 50);
	bZakoncz = new JButton("Zakoncz");
	bZakoncz.setBounds(320, 400, 100, 50);
	bOblicz = new JButton("Oblicz");
	bOblicz.setBounds(470, 400, 100, 50);
	add(bDodaj);
	add(bUsun);
	add(bZakoncz);
	add(bOblicz);

	bDodaj.addActionListener(this);
	bUsun.addActionListener(this);
	bZakoncz.addActionListener(this);
	bOblicz.addActionListener(this);
	
}




public static void main(String[] args)
{
    aplikacja = new okno();
	aplikacja.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	aplikacja.setVisible(true);
}
public void odswiezanie()
{
	
	llNazwa.clear();
	llOcena.clear();
	llEcts.clear();
	chbx.clear();
	
	
	JLabel nazwajlabel = new JLabel();
	JLabel ocenajlabel = new JLabel();
	JLabel ectsjlabel = new JLabel();
	JCheckBox tempcheckbox = new JCheckBox();
	
	for(int i=0;i<lista.size();i++) {
		
		llNazwa.add(nazwajlabel);
		llOcena.add(ocenajlabel);
		llEcts.add(ectsjlabel);
		llNazwa.get(i).setBounds(50,140+(i*20),100,20);
		llOcena.get(i).setBounds(200,140+(i*20),100,20);
		llEcts.get(i).setBounds(350,140+(i*20),100,20);
		llNazwa.get(i).setText((lista.get(i).nazwa));;
		llOcena.get(i).setText((Integer.toString(lista.get(i).ocena)));
		llEcts.get(i).setText((Integer.toString(lista.get(i).ects)));
		
		chbx.add(tempcheckbox);
		chbx.get(i).setBounds(450,140+(i*20),100,20);
		aplikacja.add(chbx.get(i));
		aplikacja.add(llNazwa.get(i));
		aplikacja.add(llOcena.get(i));
		aplikacja.add(llEcts.get(i));
		aplikacja.llNazwa.get(i).setVisible(true);
		repaint();
	}
	
}
@Override
public void actionPerformed(ActionEvent e) {
	// TODO Auto-generated method stub
	
	String tempnazwa=tNazwa.getText();
	Object zrodlo = e.getSource();
	
	if (zrodlo == bDodaj)
	{
		Przedmiot tempprzedmiot=new Przedmiot(tempnazwa,Integer.parseInt(tOcena.getText()),Integer.parseInt(tEcts.getText()));
	lista.add(tempprzedmiot);
	tNazwa.setText("");
	tOcena.setText("");
	tEcts.setText("");
	odswiezanie();
	
	

	}
	else if(zrodlo == mOtworz)
	{
		JFileChooser fc = new JFileChooser();
		if (fc.showOpenDialog(null)==JFileChooser.APPROVE_OPTION)
		{
			File plik = fc.getSelectedFile();
		}
	}
	else if(zrodlo == mZapisz)
	{
		JFileChooser fc = new JFileChooser();
		if (fc.showSaveDialog(null)==JFileChooser.APPROVE_OPTION)
		{
			
		}
	}
	
	else if(zrodlo == bZakoncz || zrodlo== mWyjscie)
	{
		int odp =JOptionPane.showConfirmDialog(null,"czy na pewno chcesz wyłączyć program?","Potwierdzenie usunięcia",JOptionPane.YES_NO_OPTION);
		if (odp ==JOptionPane.YES_OPTION)
		{
		dispose();
		}
	}
	else if(zrodlo == bUsun)
	{
		int odp =JOptionPane.showConfirmDialog(null,"czy na pewno chcesz usunac oceny?","Potwierdzenie usunięcia",JOptionPane.YES_NO_OPTION);
		if (odp ==JOptionPane.YES_OPTION)
		{
			for(int i=0;i<lista.size();i++)
			{
				llNazwa.get(i).setText("");
				
				llOcena.get(i).setText("");
				
				llEcts.get(i).setText("");
				
			
			}
			
			
		
			
	}
	}
		
	else if( zrodlo == bOblicz)
	{
		float y=0;
		float d=0;
		float wynik;
		for ( int i=0; i<lista.size();i++)
		{
			
			y+= lista.get(i).ocena * lista.get(i).ects;
			d+= lista.get(i).ects;
			
		}
		wynik = y/d;
		JOptionPane.showMessageDialog(null, "Twoja srednia to:" + String.format("%.2f", wynik));
		lWynik.setText("Srednia:\n "+ String.format("%.2f", wynik));
	}
	
	
		
}

}
`

dodam caly kod bo moze cos bd wazne xd
dokladniej chodzi mi o ten moment

Kopiuj
else if(zrodlo == bUsun)
	{
		int odp =JOptionPane.showConfirmDialog(null,"czy na pewno chcesz usunac oceny?","Potwierdzenie usunięcia",JOptionPane.YES_NO_OPTION);
		if (odp ==JOptionPane.YES_OPTION)
		{
			for(int i=0;i<lista.size();i++)
			{
				llNazwa.get(i).setText("");
				
				llOcena.get(i).setText("");
				
				llEcts.get(i).setText("");
				
			
			}
			
			
		
			
	}
	}

CH
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 656
0

W funkcji odświeżanie tworzysz po jednej etykiecie na każdą wartość, a potem tą jedną etykietę dodajesz wiele razy do listy. Według mnie może to powodować działanie niezgodne z oczekiwaniami.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.