簡體   English   中英

Java Smileys用Smiley替換字符串

[英]Java Smileys Replacing String with Smiley

我正在寫一個聊天程序。 我設計了一個帶有笑臉的圖形用戶界面,當用戶單擊一個笑臉(jbutton)時,它將其打印到文本窗格上。 我設法添加了一個高級功能,當用戶輸入“ :)”並將其發送時,它會插入笑臉而不是字符串-使用insertIcon()方法。 我的問題是,它只打印一次笑臉,而不是多次。 因此,如果我鍵入“ Hi :)我的名字叫Jack :)”,它只會插入一次圖標。 有什么建議么?

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;

    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(new ImageIcon(getClass().getResource(
                        "smileys/Smile1.png")));
            }
        });
        smiley2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                tPane.insertIcon(new ImageIcon(getClass().getResource(
                        "smileys/Smile2.png")));
            }
        });
        smiley3.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                tPane.insertIcon(new ImageIcon(getClass().getResource(
                        "smileys/Smile3.png")));
            }
        });
        smiley4.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                tPane.insertIcon(new ImageIcon(getClass().getResource(
                        "smileys/Smile4.png")));
            }
        });
        smiley5.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                tPane.insertIcon(new ImageIcon(getClass().getResource(
                        "smileys/Smile5.png")));
            }
        });
        smiley6.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                tPane.insertIcon(new ImageIcon(getClass().getResource(
                        "smileys/Smile6.png")));
            }
        });
        smiley7.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                tPane.insertIcon(new ImageIcon(getClass().getResource(
                        "smileys/Smile7.png")));
            }
        });
        smiley8.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                tPane.insertIcon(new ImageIcon(getClass().getResource(
                        "smileys/Smile8.png")));
            }
        });
        smiley9.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                tPane.insertIcon(new ImageIcon(getClass().getResource(
                        "smileys/Smile9.png")));
            }
        });

        // 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();
        // tPane.setText(a);
        // tPane.getText();

        if (a.equals(":D")) {
            tPane.insertIcon(veryHappy);
        } else if (a.equals(":)")) {
            tPane.insertIcon(smile);
        } else if (a.equals(":(")) {
            tPane.insertIcon(sad);
        } else if (a.equalsIgnoreCase(":P")) {
            tPane.insertIcon(tongue);
        } else if (a.equals(";)")) {
            tPane.insertIcon(wink);
        }

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

    }


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

    }

}

JTextPane insertIcon()方法使用選擇(最簡單情況下的插入位置)。 因此,根據您的情況,您總是只替換一次圖標。

您的s endMessage()不會檢查消息中是否多次出現":)" 使用while循環獲取":)"索引,並為每個索引選擇它,然后使用insertIcon()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM