2015-11-07 49 views
0

嗨,大家好,我有我的問題,我在這裏我的GUI類正在開始工作只是通過顯示登錄屏幕開始。但我有第二類稱爲DataLayer,它負責從文件中讀取數據並使用infromaton創建objets。 問題是,當我嘗試在GUI類中創建新的DataLayer()面板不顯示,直到我調整屏幕大小,甚至之後,keylistener不起作用。桂不畫面板

`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

的問題是,當我嘗試在GUI類來創建新的數據層()的面板沒有按顯示,直到我調整屏幕

當您從一個可見的增加(或刪除)組件GUI的基本代碼是:即使

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

的KeyListener的不起作用。

可能是因爲某些其他組件具有焦點並且只將KeyEvents區域分派給具有焦點的組件。嘗試在面板上使用requestFocusInWindow()方法。

panel.requestFocus