raz jeszcze z tymi pauzami w pentli

0

Poczytalem wasze ostatnie podpowiedzi, i wszystko było fajnie. Za co jeszcze raz dzięki.

Chce jednak przeniesc tworzenie nowego okna po przycisku i tak tez zrobiłem. Nowy problem to nie zamykanie sie starego, czyli obiekt dalej istnieje. Chciałem ukryc okno przez dispose (no i tak zrobilem) problem w tym zeteraz akcje wykonuja sie tyle razy ile jest obiektow a nie tylko raz jak chciałem

package firma3;

import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.*;
import javax.swing.*;
import java.io.FileReader;
import java.io.PrintWriter;
import javax.swing.table.AbstractTableModel;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;


public class Rozlicz_harmonogram extends JFrame implements ActionListener,WindowListener
{
 String aktualny_pracownik;
 int licznik=0;
 private static int count = 0,wielkosc_tabeli=0;
 static JButton zapisz = new JButton(new ImageIcon("C:/Firma3/vka.jpg"));
 //-----------------------------------------------------------------------------
 static JComboBox status = new JComboBox();
 private static String[][] dane,dane2;
 //_Listy----------------------------------------------------------------------
 final String fileName_zlecenia = "C:/Firma3/zlecenia.txt";
 ArrayList <Zlecenie> zlecenia = new ArrayList<Zlecenie>();
 static final String fileName_stany = "C:/Firma3/stany.txt";
 static ArrayList <Stan> stany = new ArrayList<Stan>();
 //-----------------------------------------------------------------------------
 public static void RozliczZlecenie()
              {
                count++;
                if(wielkosc_tabeli==0){System.out.println("Nie masz zleceń!!");}
                if(wielkosc_tabeli>0){
                  JPanel panel = new JPanel();
                  //------------------------------------------------------------
                  JLabel naglowek_numer=new JLabel("Nr zlecenia:   ");
                  naglowek_numer.setBounds(5,5,200,20);
                  panel.add(naglowek_numer);
                  String numer=dane2[count-1][0];
                  JLabel napis_numer=new JLabel(numer);
                  napis_numer.setBounds(100,5,200,20);
                  panel.add(napis_numer);
                  //------------------------------------------------------------
                  JLabel naglowek_data=new JLabel("Data przyjecia:   ");
                  naglowek_data.setBounds(5,25,200,20);
                  String data=dane2[count-1][1];
                  panel.add(naglowek_data);
                  JLabel napis_data=new JLabel(data);
                  napis_data.setBounds(100,25,200,20);
                  panel.add(napis_data);
                  //------------------------------------------------------------
                  JLabel naglowek_apteka=new JLabel("Apteka:   ");
                  naglowek_apteka.setBounds(5,45,200,20);
                  panel.add(naglowek_apteka);
                  String apteka=dane2[count-1][5];
                  JLabel napis_apteka=new JLabel(apteka);
                  napis_apteka.setBounds(100,45,200,20);
                  panel.add(napis_apteka);
                  //------------------------------------------------------------
                  JLabel naglowek_status=new JLabel("Status:   ");
                  naglowek_status.setBounds(5,65,200,20);
                  panel.add(naglowek_status);
                  stany = new ArrayList<Stan>(EmployeeListDecorator3.readList(fileName_stany));
                  status.addItem("Zakończone");
                  for(int i=0;i<stany.size();i++)
                  {
                   Stan a=stany.get(i);
                   status.addItem(a._nazwa_stanu);
                  }
                  status.setBounds(100,65,200,20);
                  panel.add(status);
                  //------------------------------------------------------------
                  JLabel naglowek_cel=new JLabel("Cel:   ");
                  naglowek_cel.setBounds(5,90,200,20);
                  panel.add(naglowek_cel);
                  JTextArea pole_cel=new JTextArea();
                  pole_cel.setLineWrap(true);
                  pole_cel.setText(dane2[count-1][7]);
                  pole_cel.setBounds(100,90,600,60);
                  panel.add(pole_cel);
                  //------------------------------------------------------------
                  JLabel naglowek_rozwiazanie=new JLabel("Rozwiazanie:   ");
                  naglowek_rozwiazanie.setBounds(5,160,200,20);
                  panel.add(naglowek_rozwiazanie);
                  JTextArea pole_rozwiazanie=new JTextArea();
                  pole_rozwiazanie.setLineWrap(true);
                  pole_rozwiazanie.setText(dane2[count-1][8]);
                  pole_rozwiazanie.setBounds(100,180,600,60);
                  panel.add(pole_rozwiazanie);
                  //------------------------------------------------------------
                  zapisz.setToolTipText("Kliknij aby dodać zecenie");
                  zapisz.setBounds(650, 5, 50, 50);
                  panel.add(zapisz);
                  //------------------------------------------------------------
                  panel.setLayout(null);
                  final JFrame okno = new JFrame("Rozlicz zlecenie");
                  okno.setSize(730,300);
                  okno.add(panel);
                  okno.setVisible(true);
                  okno.setLocationRelativeTo(null);
                  zapisz.addMouseListener(new MouseAdapter()
                  {
                   public void mouseClicked(final MouseEvent e)
                    {
                     if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 1)
                        {
                            <b>System.out.println("Nie masz zleceń!!");</b>
                            okno.dispose();
                            if(count < wielkosc_tabeli){RozliczZlecenie();}
                        }
                   }
                  });
                  //------------------------------------------------------------
                  okno.addWindowListener(new WindowListener()
                    {
                    public void windowActivated(WindowEvent e) { }
                    public void windowClosed(WindowEvent e) { }
                    public void windowDeactivated(WindowEvent e) { }
                    public void windowDeiconified(WindowEvent e) { }
                    public void windowIconified(WindowEvent e) { }
                    public void windowOpened(WindowEvent e) { }
                    public void windowClosing(WindowEvent e) {   }
                    public void actionPerformed(ActionEvent evt){    }
                    //----------------------------------------------------------
                });
              }
            }
 
 //-----------------------------------------------------------------------------
 public Rozlicz_harmonogram(final String aktualny_pracownik)
    {
     this.aktualny_pracownik=aktualny_pracownik;
     //---- wczytywanie pliku --------------------------------------------------
     zlecenia = new ArrayList<Zlecenie>(EmployeeListDecorator4.readList(fileName_zlecenia));
    //======== wczytywanie danych ==================================================
     dane=new String[zlecenia.size()][10]; //wiersze, kolumny
     for (int i=0;i<zlecenia.size();i++)
       {
            for (int j=0;j<9;j++)
            {
             dane[i][0]=zlecenia.get(i)._numer;
             dane[i][1]=zlecenia.get(i)._data_przyjecia;
             dane[i][2]=zlecenia.get(i)._przyjal;
             dane[i][3]=zlecenia.get(i)._serwisuje;
             dane[i][4]=zlecenia.get(i)._data_realizacji;
             dane[i][5]=zlecenia.get(i)._apteka;
             dane[i][6]=zlecenia.get(i)._status;
             dane[i][7]=zlecenia.get(i)._cel;
             dane[i][8]=zlecenia.get(i)._rozwiazanie;
            }
       if((zlecenia.get(i)._serwisuje.equals(aktualny_pracownik))&&((zlecenia.get(i)._status.equals("Zakończone"))||(zlecenia.get(i)._status.equals("Przyjęte"))||(zlecenia.get(i)._status.equals("Serwisowane")))) {wielkosc_tabeli++;}
       }
       //-----------------------------------------------------------------------
       dane2=new String[wielkosc_tabeli][10]; //wiersze, kolumny
       for (int i=0;i<zlecenia.size();i++)
          {
           if(((zlecenia.get(i)._status.equals("Zakończone"))||(zlecenia.get(i)._status.equals("Przyjęte"))||(zlecenia.get(i)._status.equals("Serwisowane")))&&((zlecenia.get(i)._serwisuje.equals(aktualny_pracownik))))
                {
                    for (int j=0;j<9;j++)
                        {
                         dane2[licznik][j]=dane[i][j];
                         }
                    licznik++;
                  }
           }
//==============================================================================
  RozliczZlecenie();
  }
    public void actionPerformed(ActionEvent evt)  { }
    public void windowOpened(WindowEvent e) { }
    public void windowClosing(WindowEvent e) { }
    public void windowClosed(WindowEvent e) { }
    public void windowIconified(WindowEvent e) {    }
    public void windowDeiconified(WindowEvent e) {   }
    public void windowActivated(WindowEvent e)  {  }
    public void windowDeactivated(WindowEvent e) {}
    //--------------------------------------------------------------------------    
}

Akcja ta wytłuszczona wykonuje sie przy jendym kliknieciu przycisku o zawsze o jeden raz więcej. czyli 1,2,3,4.... do. Jak akcje czyli ten wyswietlanie tego napisu miałem w public void windowClosing(WindowEvent e) { } Wszystko było ok

Troche kombinowałem i chciałem umieścic przycisk w
public void actionPerformed(ActionEvent evt)
{
if(zapisz==dodaj_noda)
{
System.out.println("Nie masz zleceń!!");
}

I tak by było super ale pojawia sie taki bład przy deklaracji, gdzy wstawiłem do public static void RozliczZlecenie() kod :

zapisz.setToolTipText("Kliknij aby dodać zecenie");
zapisz.setBounds(650, 5, 50, 50);
panel.add(zapisz);
dodaj_noda.addActionListener(this);

pojawiał sie błąd:

non-static variable this cannot referend from a static contexst.

Najlepiej by bylo sie pozbyc tych wszystkich static, ale prawde mowiac czesc kodu do petli zaczerpnełem od was i teraz nie wiem jak to zrobić
Widac jeszcze wiel sie musze nauczyc, do dopiero moj 2 miesiac z java ;/

0

Aby dodać ActionListener musisz mieć obiekt. Czyli nie możesz wywołać tego z funkcj z modyfikatorem static. Przenieś to do np. konstruktora.

0

Juz sobie poradziłem dzieki ;)

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