JOptionPane не закрывается - PullRequest
       4

JOptionPane не закрывается

1 голос
/ 04 сентября 2011

Хорошо, я не знаю, почему это происходит, но когда я нажимаю кнопку закрытия, панель перехода не закрывается. Он снова выскакивает, и мне нужно несколько раз щелкнуть, чтобы закрыть его.

Здесь снимок кода

Point p;
    p   = onScreenLocation(0.134,0.019, eastlake);
    btn.setBounds(p.x,p.y,128,96);
    btn.setContentAreaFilled(false);
    btn.setBorderPainted(false);
    add(btn);

    btn.addMouseListener(new MouseAdapter(){
        public void mouseClicked(MouseEvent me){
        Object[] options = {"View Info","View Place","Close"};
        Object[] choice ={"Close"};
        int response = JOptionPane.showOptionDialog(null,"Apartment Area","Message",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE,ResidentImage,options,"Close");
        if(response == 0 ){
            JOptionPane.showOptionDialog(null, "Apartment Eastlake \n" +
                    "provides students with conducive room and reasonable prices ", "Message", JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE,ResidentImage,choice,"Close");
        }
        else if(response == 1){
            JFrame ImageBox = new JFrame();
            ImageBox.setSize(300,400);
            ImageBox.add(new JLabel(ResidentImageView,SwingConstants.CENTER));
            ImageBox.setVisible(true);
        }
        else{

        }   

        }

    });

Полный код

package environment;

import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.*;


public class Map extends JPanel{

    String time = null;
    serializedObject[] humans2 = null;
    serializedDatas input = new serializedDatas();
    Image eastlake,otherImage, buddyImage, clientImage, EventImage;
    String[] buddyList;
    String clientName;
    JFrame frame;

    ClassLoader cl = this.getClass().getClassLoader();
    ImageIcon TransparentImage = new ImageIcon(cl.getResource("image1/bnt1.png"));

    ImageIcon TescoImageView = new ImageIcon(cl.getResource("image1/tesco.jpg"));
    ImageIcon TescoImage = new ImageIcon(cl.getResource("image1/Tesco.png"));



    JButton btn = new JButton(TransparentImage);

    public Map(Image map, Image agent, Image buddy, Image other, String clientName){

        eastlake = map;
        clientImage = agent;
        otherImage = other;
        buddyImage = buddy;
        this.clientName = clientName;
    }

    protected void  paintComponent(Graphics g)
    {
        super.paintComponents(g);
        Graphics2D g2d = (Graphics2D) g;
        g2d.drawImage(eastlake,0,0,null);
        this.setPreferredSize(new Dimension(2624,1696));


        Font font = new Font("Helvetica", Font.BOLD,  12);

        g2d.setFont(font);
        g2d.setColor(Color.red);
        if(time != null)
            g2d.drawString(time, 10, 10);

        Point p;
        p   = onScreenLocation(0.134,0.019, eastlake);
        btn.setBounds(p.x,p.y,128,96);
        btn.setContentAreaFilled(false);
        btn.setBorderPainted(false);
        add(btn);

        btn.addMouseListener(new MouseAdapter(){
            public void mouseClicked(MouseEvent me){
            Object[] options = {"View Info","View Place","Close"};
            Object[] choice ={"Close"};
            int response = JOptionPane.showOptionDialog(null,"Apartment Area","Message",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE,ResidentImage,options,"Close");
            if(response == 0 ){
                JOptionPane.showOptionDialog(null, "Apartment Eastlake \n" +
                        "provides students with conducive room and reasonable prices ", "Message", JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE,ResidentImage,choice,"Close");
            }
            else if(response == 1){
                JFrame ImageBox = new JFrame();
                ImageBox.setSize(300,400);
                ImageBox.add(new JLabel(ResidentImageView,SwingConstants.CENTER));
                ImageBox.setVisible(true);
            }
            else{

            }   

            }

        });

    }

    public void setTime(String time2) {
        // TODO Auto-generated method stub
        this.time = time2;
    }

    public void setBuddyList(String[] buddyList2) {
        // TODO Auto-generated method stub
        this.buddyList = buddyList2;
    }

    protected Point onScreenLocation(double x, double y, Image img)
    {
        return new Point((int)(img.getWidth(null)*x),(int)(img.getHeight(null)*y));
    }
}

Отредактировано: Написал неправильный код ранее.

1 Ответ

7 голосов
/ 04 сентября 2011

Прежде всего, всегда полезно опубликовать минимальный пример кода, тем более что во многих случаях вы сами найдете свою ошибку таким образом.

Но на этот раз это кажется довольно очевидным:

Вы должны добавить mouseListener в ваш конструктор, а НЕ каждый раз, когда вызывается paintComponent.В противном случае вы добавляете новый слушатель каждый раз, когда вызывается ваш метод paintComponent, что может быть довольно много для компонента Swing (также, поскольку JOptionPane, вероятно, скрывает части панели, нажатие кнопки ok создаст новый вызов paintComponent, что означает, что вы получилибесконечная петля есть).

...