Java insertIcon在文本窗格中多次出现

时间:2014-11-08 16:00:55

标签: java icons jbutton chat jtextpane

我正在用Java编写聊天程序。我为笑脸制作了一个部分。我设法在每次单击时在文本窗格上打印表情符号,但是当我点击同一个笑脸不止一次时它只打印一次。有什么帮助吗?

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class SmileyTesterGUI extends JFrame {

    JPanel main = new JPanel();
    JPanel south = new JPanel();
    JPanel messageCenter = new JPanel();
    JPanel smileysNorth = new JPanel();
    JTextField text;
    JTextPane tPane;
    Icon happy;
    Icon smile;
    Icon tongue;
    Icon veryHappy;
    Icon wink;
    Icon laugh;
    Icon sad;
    Icon verySad;
    Icon cry;
    int number = 0;
    boolean check = true;

    public SmileyTesterGUI() {
        super("Smileys");
        add(main);
        main.setLayout(new BorderLayout());
        main.add(south, BorderLayout.SOUTH);
        south.setLayout(new BorderLayout());
        south.add(messageCenter, BorderLayout.CENTER);
        south.add(smileysNorth, BorderLayout.NORTH);

        // textpane panel
        tPane = new JTextPane();
        JScrollPane sPane = new JScrollPane(tPane);
        main.add(sPane);
        tPane.setEditable(false);

        // smileysPanel
        smileysNorth.setLayout(new GridLayout(1, 0));
        JButton smiley1 = new JButton();
        JButton smiley2 = new JButton();
        JButton smiley3 = new JButton();
        JButton smiley4 = new JButton();
        JButton smiley5 = new JButton();
        JButton smiley6 = new JButton();
        JButton smiley7 = new JButton();
        JButton smiley8 = new JButton();
        JButton smiley9 = new JButton();
        smileysNorth.add(smiley1);
        smileysNorth.add(smiley2);
        smileysNorth.add(smiley3);
        smileysNorth.add(smiley4);
        smileysNorth.add(smiley5);
        smileysNorth.add(smiley6);
        smileysNorth.add(smiley7);
        smileysNorth.add(smiley8);
        smileysNorth.add(smiley9);

        // set smileys(icon) to each button - pathed from personal directory
        happy = new ImageIcon(getClass().getResource("smileys/Smile1.png"));
        smiley1.setIcon(happy);
        smile = new ImageIcon(getClass().getResource("smileys/Smile2.png"));
        smiley2.setIcon(smile);
        tongue = new ImageIcon(getClass().getResource("smileys/Smile3.png"));
        smiley3.setIcon(tongue);
        veryHappy = new ImageIcon(getClass().getResource("smileys/Smile4.png"));
        smiley4.setIcon(veryHappy);
        wink = new ImageIcon(getClass().getResource("smileys/Smile5.png"));
        smiley5.setIcon(wink);
        laugh = new ImageIcon(getClass().getResource("smileys/Smile6.png"));
        smiley6.setIcon(laugh);
        sad = new ImageIcon(getClass().getResource("smileys/Smile7.png"));
        smiley7.setIcon(sad);
        verySad = new ImageIcon(getClass().getResource("smileys/Smile8.png"));
        smiley8.setIcon(verySad);
        cry = new ImageIcon(getClass().getResource("smileys/Smile9.png"));
        smiley9.setIcon(cry);

        // smileys print on the textpane

        smiley1.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                tPane.insertIcon(happy);
            }
        });
        smiley2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                tPane.insertIcon(smile);
            }
        });
        smiley3.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                tPane.insertIcon(tongue);
            }
        });
        smiley4.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                tPane.insertIcon(veryHappy);
            }
        });
        smiley5.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                tPane.insertIcon(wink);
            }
        });
        smiley6.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                tPane.insertIcon(laugh);
            }
        });
        smiley7.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                tPane.insertIcon(sad);
            }
        });
        smiley8.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                tPane.insertIcon(verySad);
            }
        });
        smiley9.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                tPane.insertIcon(cry);
            }
        });

        // messagePanel
        messageCenter.setLayout(new BorderLayout());
        text = new JTextField();
        JButton send = new JButton("Send");
        messageCenter.add(text);
        messageCenter.add(send, BorderLayout.EAST);

        text.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                sendMessage();
            }
        });

        send.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                sendMessage();
            }
        });

        setLocation(500, 0);
        setSize(600, 250);
    }

    public void sendMessage() {
        String a = text.getText();
        //
        // if(a){
        // tPane.setText(a);
        // tPane.getText();
        // }

        if (a.contains(":D")) {
            tPane.insertIcon(veryHappy);

        } else if (a.contains(":)")) {
            tPane.insertIcon(happy);
        } else if (a.contains(":(")) {
            tPane.insertIcon(sad);
        }

//      text.setText(null);
//      text.requestFocus();

    }

    public static void main(String[] args) {
        new SmileyTesterGUI().setVisible(true);

    }

}

1 个答案:

答案 0 :(得分:1)

这是因为您不能再向ImageIcon添加相同的JTextPane一次。 您可以在ImageIcon中动态创建ActionListener,每次点击smiley时都会创建新的ImageIcon

   smiley2.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            tPane.insertIcon(new ImageIcon(getClass().getResource("smileys/Smile2.png")));
        }
    });