【问题标题】:Gui does not paint the panel桂不画面板
【发布时间】:2016-02-08 21:39:59
【问题描述】:

嗨,伙计们,我有一个很棘手的问题,我在这里遇到了我的 GUI 类在开始时只需显示登录屏幕就可以很好地工作。但我有第二个名为 DataLayer 的类,它负责从文件中读取并使用 infromaton 创建对象。 问题是,当我尝试在 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);


    }




}

【问题讨论】:

    标签: java swing user-interface panel keylistener


    【解决方案1】:

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

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

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

    即使在此之后 keylistener 也不起作用。

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

    panel.requestFocus
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多