Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Gui不绘制面板_Java_Swing_User Interface_Panel_Keylistener - Fatal编程技术网

Java Gui不绘制面板

Java Gui不绘制面板,java,swing,user-interface,panel,keylistener,Java,Swing,User Interface,Panel,Keylistener,嗨,伙计们,我有一个问题,我在这里,我的GUI类在一开始只是通过显示loggin屏幕工作得很好。但我有第二个类叫做DataLayer,它负责读取文件并用Inforomaton创建对象。 问题是,当我尝试在GUI类中创建新的DataLayer()时,面板不会显示,直到我调整屏幕大小,甚至在这之后keylistener也无法工作 `package View; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.

嗨,伙计们,我有一个问题,我在这里,我的GUI类在一开始只是通过显示loggin屏幕工作得很好。但我有第二个类叫做DataLayer,它负责读取文件并用Inforomaton创建对象。 问题是,当我尝试在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);


    }




}
问题是,当我尝试在GUI类中创建新的DataLayer()时,面板在我调整屏幕大小之前不会显示

从可见GUI添加(或删除)组件时,基本代码为:

panel.add(...);
panel.revalidate(); // to invoke the layout manager
panel.repaint(); // to paint the components.
即使在那之后,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);


    }




}
可能是因为其他一些组件只有焦点和KeyEvents区域被分派给具有焦点的组件。尝试使用面板上的
requestFocusInWindow()
方法

panel.requestFocus