Фигуры не отображаются (пока JFrame не свернут и не восстановлен) - PullRequest
0 голосов
/ 17 мая 2018

Здесь я хочу, чтобы при нажатии на кнопки фигуры появлялись сразу, но фигуры не появляются, если JFrame не свернут и не восстановлен.

package tutorial;
public class Tutorial extends JPanel{
JButton b1,b2,b3,b4,b5;

boolean nodeA, nodeB,communicate, key, acknowledge = false;
public  Tutorial(){

    b1 = new JButton("Node A");
    add(b1);
    b2 = new JButton("Node B");
    add(b2);
    b3 = new JButton("Communicate");
    add(b3);
    b4 = new JButton("send key");
    add(b4);
    b5 = new JButton("Request B");
    add(b5);
}

public void paintComponent(Graphics g){

    super.paintComponent(g);
    g.setColor(Color.black);
    g.fillRect(300, 100,100, 50);
    g.setColor(Color.red);
    g.drawString("KDC/KMC",320,130);


    b1.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent e) {
            nodeA = true;
        }
    });

    if(nodeA == true){
        g.setColor(Color.green);
        g.fillOval(100, 300, 70, 70);
        g.setColor(Color.red);
        g.drawString("Node A", 113, 340); 
        g.drawString("Node A added",150,220);
        g.drawLine(150, 300, 300, 150);
    }

    b2.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent e) {
            nodeB = true;    
        }
     });
    if(nodeB == true){
        g.setColor(Color.green);
        g.fillOval(530, 300, 70, 70);
        g.setColor(Color.red);
        g.drawString("Node B",545,340);
        g.drawString("Node B added",473,220);
        g.drawLine(550, 300, 400, 150); 
    }

    b3.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent e) {
            if(nodeA == true && nodeB == true)
                communicate = true;
        }
     });
    if(communicate == true){
        g.drawString("A requests for B's Session Key", 230,260);
        g.drawLine(165, 310, 325, 150);
    }

    b4.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent e) {
            if(communicate == true)
                key = true;    
        }
     });
    if(key == true){
        g.drawString("A's key is 4",210,175);
        g.drawString("B's key is 5",430,175);
    }

    b5.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent e) {
            if(key == true)
                acknowledge = true;    
        }
     });
    if(acknowledge == true){
        g.drawLine(170,325,530,325);
        g.drawString("A sends part of session key to B", 260, 320);
        g.drawLine(170,350,530,350);
        g.drawString("if sessiion key match then B sent Acknowledgement", 215, 365);
  }}

public static void main(String[] args) {

    Tutorial t = new Tutorial();
    JFrame jf = new JFrame("Assignment");

    jf.setSize(1200,900);
    jf.add(t);
    jf.setVisible(true);        
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

}

Здесь это выглядит как при нажатии, но не свернуто введите описание изображения здесь и здесь это выглядит как когда JFrame свернут и восстановлен введите описание изображения здесь

1 Ответ

0 голосов
/ 17 мая 2018

Полагаю, вы что-то делаете, чтобы добавить этот зеленый узел позже?Если вы изменяете классы напрямую, без того, чтобы они были классами Swing, я думаю, что вы должны вручную выполнить repaint () для вашего класса / контейнера Swing, или Swing не знает, что компоненты должны обновляться на экране (классы Swing делают это автоматическикогда они изменены, так что вам не нужно делать это, когда вы вызываете add (), например).- markspace

Связанный: Repaint () и Revalidate () stackoverflow.com/questions/1097366/… Сделайте также некоторые поиски, чтобы понять, как работает система перерисовки Swing (множество учебных пособий).- отметка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...