繁体   English   中英

桂不油漆面板

[英]Gui does not paint the panel

嗨,大家好,我有一个奇怪的问题,我的GUI类只显示loggin屏幕就可以很好地开始工作。 但是我有第二个类叫做DataLayer,它负责从文件读取并使用infromaton创建objets。 问题是,当我尝试在GUI类中创建新的DataLayer()时,直到我调整屏幕大小甚至在键侦听器不起作用之前,面板都不会显示。

`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.

即使之后,键侦听器也无法正常工作。

可能是因为其他某个组件具有焦点,而KeyEvents区域仅分派给了具有焦点的组件。 尝试在面板上使用requestFocusInWindow()方法。

panel.requestFocus

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM