2015-11-07 3 views
0

привет, ребята, у меня есть проблема с wird. У меня здесь мой класс GUI работает хорошо, только показывая экран loggin. но у меня есть второй класс под названием DataLayer, который отвечает за чтение из файлов и создание объектов с infromaton. проблема заключается в том, что когда я пытаюсь создать новый класс DataLayer() в классе GUI, панель не покажет, пока я не изменю размер экрана, и даже после этого keylistener не работает.Gui не рисует панель

`package View; 

import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.event.KeyAdapter; 
import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 

import javax.swing.JPanel; 

import dto.DataLayer; 
import dto.ProductDTO; 

public class GUI extends JPanel { 
    private DataLayer dt; 
    private ComponentAbstract korzen; 
    private GUI self; 
    public GUI() { 
     this.setFocusable(true); 
     this.dt=new DataLayer();` 

     self=this; 

     this.stworz_PanelLogowania(); 



     this.addKeyListener(new KeyAdapter() { 
      @Override 
      public void keyPressed(KeyEvent e) { 
       korzen.tryPressKey(e); 
       repaint(); 
      } 
     }); 


    this.addMouseListener(new MouseAdapter() { 
     @Override 
     public void mouseClicked(MouseEvent e) { 
      super.mouseClicked(e); 
      korzen.tryClick(e.getX(), e.getY()); 
      repaint(); 
     } 
    }); 

    this.repaint(); 

    } 

    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     korzen.repaint(); 
     System.out.println("omatko"); 
     korzen.draw((Graphics2D)g); 

    } 

    private void zmien_panel(ComponentAbstract newkorzen){ 
     korzen=newkorzen; 
     self.repaint(); 
    } 


    private void stworz_PanelLogowania(){ 

     LinearPanel lp=new LinearPanel(220, 10, 300, 300); 

     lp.setOrientarion(Orientation.VERTICAL); 

     LinearPanel labels_panel=new LinearPanel(220,0,50,80); 
     labels_panel.setOrientarion(Orientation.VERTICAL); 

     labels_panel.addComponent(new Label(0, 0, 350, 40, "Witamy w castorama APP")); 
     lp.setPadding(6); 
     LinearPanel textpanel1=new LinearPanel(0, 0, 350, 80); 
     textpanel1.setPadding(0); 
     textpanel1.addComponent(new Label(0,0,350,40,"Login:")); 
     textpanel1.addComponent(new TextBox(0, 0, 350, 40)); 

     LinearPanel textpanel2=new LinearPanel(0, 0, 35, 80); 
     textpanel2.setPadding(0); 
     textpanel2.addComponent(new Label(0,0,350,40,"Hasło:")); 
     textpanel2.addComponent(new TextBox(0, 0, 350, 40)); 

     lp.addComponent(labels_panel); 
     lp.addComponent(textpanel1); 
     lp.addComponent(textpanel2); 

     LinearPanel buttons_panel=new LinearPanel(00, 00, 350, 40); 
     buttons_panel.setOrientarion(Orientation.HORIZONTAL); 
     buttons_panel.addComponent(new Button(170,40,"Zaloguj"){ 
      @Override 
      public void onClick() { 
       TextBox tlogin=(TextBox)korzen.getComponent(1).getComponent(1); 
       TextBox tpass=(TextBox)korzen.getComponent(2).getComponent(1); 
       if(dt.autoryzacja_uzytkownika(tlogin.getText(), tpass.getText())){ 
        System.out.println("Puszczamy typa"); 
       } 
      } 
     }); 
     buttons_panel.addComponent(new Button(170,40,"Wyjdz"){ 
      @Override 
      public void onClick() { 
       System.exit(0); 
      } 
     }); 

     lp.addComponent(buttons_panel); 

     korzen=lp; 
     System.out.println("kuniec"); 
    } 

    private void stworz_panelGlowny(){ 
     LinearPanel glowny=new LinearPanel(220,0,50,80); 


    } 




} 

ответ

2

проблема заключается в том, что, когда я пытаюсь создать новый DataLayer() в классе GUI панель Безразлично показать, пока я не изменить размер экрана

При добавлении (или удалить) компоненты из видимых GUI основной код:

panel.add(...); 
panel.revalidate(); // to invoke the layout manager 
panel.repaint(); // to paint the components. 

даже после того, что KeyListener не работает.

Возможно, потому что у другого компонента есть область фокусировки и область KeyEvents, отправленная только компоненту с фокусом. Попробуйте использовать метод requestFocusInWindow() на панели.

panel.requestFocus 
Смежные вопросы