Zapytania do bazy danych i Swing

0

Witam. Mam problem z 3 rzeczami w moim programie:

  • przyciski sa przycinane w polowie okna programu i nie widac ich wszystkich w oknie
  • metody ktore sa przypisane do przyciskow nie dzialaja tzw naciskam przycisk i zero reakcji ze strony programu
  • metoda Zapiszsqldopliku() nie dzialaja jak nalezy -> zamiast odczytac wszystko to odczytuje co drugi wiersz

Baza danych sklada sie z id, imie, pensja oraz urlop
Plik z ktorego odczytuje dane wyglada tak:

1: a pensja: 400 urlop: false
2: b pensja: 1400 urlop: true

Kod programu:

// STRUKTURA PRACOWNIKA
abstract class pracownik 
{
  public String imie;
  public int pensja;
  public boolean urlop;
  
  public pracownik(String iImie, int iPensja, boolean iUrlop) 
  {
    this.imie = iImie;
    this.pensja = iPensja;
    this.urlop = iUrlop;
  }
  
  public String wypiszstatus()
    {
	return "pracownik";
    }
}

// RAMKA
class Ramka extends JFrame
{
    public Ramka()
    {
    //rozmiar okna
    setSize(500, 300);
    //polozenie okna wzgledem ekranu
    setLocation(50, 50);
    //tytulu calego okna 
    setTitle("Obsluga pracownikow");  
        
    GridLayout g = new GridLayout(4,3);
    setLayout(g);
    
    JSrodek p1 = new JSrodek();
    add(p1);
    }
}


public class Pracownicy 
{
  public static void main(String[] args) 
    {
    Ramka ramka = new Ramka();
    ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    ramka.setVisible(true);
    }
    
}

class JSrodek extends JPanel implements ActionListener
{
 JButton Wyswietlpracownikow = new JButton("Wyswietl pracownikow");
 JButton Dodajpracownika = new JButton("Dodaj pracownika");
 JButton Dajpodwyzke = new JButton("Daj podwyzke");
 JButton Przeniesnaurlop = new JButton("Przenies na urlop");
 JButton Zapisdopliku = new JButton("Zapis do pliku");
 JButton Usunieciepracownika = new JButton("Usuniecie pracownika");
 JButton Odczytzpliku = new JButton("Odczyt z pliku");
 JButton Zapiszplikudosql = new JButton("Zapis z pliku do sql");
 JButton Zapiszsqldopliku = new JButton("Zapis z sql do pliku");
 
JSrodek()
{
     add(Wyswietlpracownikow);
     add(Dodajpracownika);
     add(Dajpodwyzke);
     add(Przeniesnaurlop);
     add(Zapisdopliku);
     add(Usunieciepracownika);
     add(Odczytzpliku);
     add(Zapiszplikudosql);
     add(Zapiszsqldopliku);
}

//PRZYCISKI
    public void actionPerformed (ActionEvent e)
    {
    List<pracownik> pracownicy = new ArrayList<pracownik>();
    
      if (e.getSource() == Wyswietlpracownikow)
      {
      for (int i=0, j=1; i<pracownicy.size(); i++, j++) 
        {
          String komunikat = "i " + j + " imie " + pracownicy.get(i).imie + " pensja " + pracownicy.get(i).pensja + " urlop " + pracownicy.get(i).urlop; 
          JOptionPane.showMessageDialog(null, komunikat);
        }  
      }
      
      if (e.getSource() == Dodajpracownika)
      {
        String imie;
        imie = JOptionPane.showInputDialog("Podaj imie:");
        int pensja;
        pensja = Integer.parseInt((JOptionPane.showInputDialog("Podaj pensje:")));
        pracownicy.add(new pracownik(imie, pensja, false) {});
        String komunikat = "Pracownik zostal dodany";
        JOptionPane.showMessageDialog(null, komunikat); 
        
      }
      
      if (e.getSource() == Dajpodwyzke)
      {
      int nr = 0, pensja = 0; 
      nr = Integer.parseInt((JOptionPane.showInputDialog("Podaj numer pracownika ktoremu chcesz przyznac podwyzke:")));
      pensja = Integer.parseInt((JOptionPane.showInputDialog("Podaj o ile podwyzszyc pensje:")));
      pracownicy.get(nr-1).pensja = pracownicy.get(nr-1).pensja + pensja;
      String komunikat = "Dodano podwyzke";
      JOptionPane.showMessageDialog(null, komunikat); 
      }
      
      if (e.getSource() == Przeniesnaurlop)
      {
      int nr;  
      nr = Integer.parseInt((JOptionPane.showInputDialog("Podaj numer pracownika ktorego chcesz przeniesc na urlop")));
      pracownicy.get(nr-1).urlop = true;   
      String komunikat = "Pracownik zostal przeniesiony na urlop";
      JOptionPane.showMessageDialog(null, komunikat); 
      }
      
      if (e.getSource() == Zapisdopliku)
      {
      try 
      {    
      PrintWriter raport = new PrintWriter("raport.txt");
      for (int i=0, j=1; i<pracownicy.size(); i++, j++)
        {
	  raport.println(j+": "+ pracownicy.get(i).imie+ " pensja: "+pracownicy.get(i).pensja+" urlop: "+pracownicy.get(i).urlop);
	}
      raport.close();
      String komunikat = "Zapisano pracownikow z listy do pliku";
      JOptionPane.showMessageDialog(null, komunikat);    
      }
      
      catch (IOException err) 
      {
      System.out.println("blad podczas zapisu pliku");
      }
      
      }
      
      if (e.getSource() == Usunieciepracownika)
      {
      int nr;
      nr = Integer.parseInt((JOptionPane.showInputDialog("Podaj nr pracownika do usuniecia (0-9)")));
      pracownicy.remove(nr-1);
      String komunikat = "Pracownik zostal usuniety";
      JOptionPane.showMessageDialog(null, komunikat); 
      }
      
      if (e.getSource() == Odczytzpliku)
      {
       try
       {
       Scanner sc = new Scanner(new File("raport.txt"));
       while(sc.hasNextLine())
        {
           String line = sc.nextLine();
           Scanner sc2 = new Scanner(line);
           sc2.next();
           String imie = sc2.next();
           sc2.next();
           int pensja = sc2.nextInt();
           sc2.next();
           boolean urlop = sc2.nextBoolean();
           pracownicy.add(new pracownik(imie,pensja,urlop) {});
        }
        sc.close();
        String komunikat = "Zapisano pracownikow z pliku do listy";
        JOptionPane.showMessageDialog(null, komunikat);
        }
        catch(FileNotFoundException a)
        {
            System.out.println("Plik raport.txt nie istnieje");
        }
 
        catch(Exception b)
        {
            System.out.println("Plik raport.txt jest niedostepny");
        } 
       
     }
      
      if (e.getSource() == Zapiszplikudosql)
      {
       try
        {
        String k1 = "Nawiazanie polaczenia";
        JOptionPane.showMessageDialog(null, k1);
        Class.forName("org.postgresql.Driver");
        Connection conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/","postgres", "test");
        String k2 = "Logowanie do bazy powiodlo sie";
        JOptionPane.showMessageDialog(null, k2);
        Statement st = conn.createStatement();
        PreparedStatement pst;
        ResultSet rs;
        Scanner sc = new Scanner(new File("raport.txt"));
        String k3 = "Zapis pracownikow do bazy";
        JOptionPane.showMessageDialog(null, k3);
        int i=1;   
        while(sc.hasNextLine())
        {
            String line = sc.nextLine();
            Scanner sc2 = new Scanner(line);
            sc2.next();
            String imie = sc2.next();
            sc2.next();
            int pensja = sc2.nextInt();
            sc2.next();
            boolean urlop = sc2.nextBoolean();
                        
            String stm = "INSERT INTO pracownicy(id, imie, pensja, urlop) VALUES("+i+",'"+imie+"',"+pensja+","+urlop+");";
            pst = conn.prepareStatement(stm);
            pst.executeUpdate();
            i++;
        }
     
     sc.close();
     conn.close(); 
     String k4 = "Dodano pracownikow do postgresql";
     JOptionPane.showMessageDialog(null, k4);
   }
    
    catch (ClassNotFoundException a)
    {
    a.printStackTrace();
    System.out.append("Brak sterownika");
    }
		
    //wyjatek dotyczacy z baza 
    catch (SQLException b)
    {
    b.printStackTrace();
    System.out.append("Blad z POSTGRESQL / Niepoprawne dane do logowania");
    }
    
    catch(FileNotFoundException c)
    {
    c.printStackTrace();
    System.out.println("Plik raport.txt nie istnieje");
    }
       
      }
      
   if (e.getSource() == Zapiszsqldopliku)
   {
      try
      {
      String k1 = "Nawiazanie polaczenia";
      JOptionPane.showMessageDialog(null, k1);    
      Class.forName("org.postgresql.Driver");
      Connection conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/","postgres", "test");
      String k2 = "Logowanie do bazy powiodlo sie";
      JOptionPane.showMessageDialog(null, k2);
      Statement st = conn.createStatement();
      PreparedStatement pst;
      ResultSet rs;
      PrintWriter sc = new PrintWriter("raport.txt");
      String k3 = "Zapis pracownikow do pliku";
      JOptionPane.showMessageDialog(null, k3);
      pst = conn.prepareStatement("SELECT * FROM pracownicy");
      rs = pst.executeQuery();
      
      
      while(rs.next())
	{
        int liczba = rs.getInt(1); 
        String imie = rs.getString(2);
        int pensja = rs.getInt(3);
        boolean urlop = rs.getBoolean(4);
        sc.println(liczba+": "+ imie+ " pensja: "+pensja+" urlop: "+urlop);
        rs.next();
        }
      
       conn.close();
       sc.close();
       String k4 = "Zapisano pracownikow do pliku";
       JOptionPane.showMessageDialog(null, k4);
       }
      	
    //wyjatek dotyczacy z baza 
    catch (ClassNotFoundException a)
    {
    a.printStackTrace();
    System.out.append("Brak sterownika");
    }
		
    //wyjatek dotyczacy z baza 
    catch (SQLException a)
    {
    a.printStackTrace();
    System.out.append("Blad z POSTGRESQL / Niepoprawne dane do logowania");
    }
    
    catch(FileNotFoundException a)
    {
    a.printStackTrace();
    System.out.println("Plik raport.txt nie istnieje");
    }
   }
  }
}
1

Ad.1 Pomajstruj z GridLayout (np 1,1).
Ad.2 Do przycisku dodaj ActionListener, przykład:

Wyswietlpracownikow.addActionListener(this);
0

szweszwe juz dziala lepiej z tym ze Wyswietlpracownikow() nie dziala, przez co nie moge sprawdzic czy pozostale metody dzialaja tak jak trzeba

0

Bo problem polega na tym, że dodajesz do listy ale po zakończeniu jednej akcji lista znika i przy klikaniu na przycisk do wypisywania tworzona jest nowa lista która jest pusta. Musisz zrobić tak, że dodając nowego pracownika dodajesz go do listy która istnieje przez cały czas działania programu.

0

Moglbys napisac rozwiazanie tego problemu? Ciagle kombinuje ale nadal nie wychodzi.

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