微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Jframe 检查一个句子是否是一个全字组

如何解决使用 Jframe 检查一个句子是否是一个全字组

我想创建一个用户需要输入句子的案例。

代码应该验证句子是否为:

在文本区域:系统应显示该句子是哪个选项。

附件中 JFrame 外观的屏幕截图。

有人可以帮助我如何实施吗?

enter image description here

解决方法

简介

我继续创建了以下 GUI。

Pangram Analysis 1

GUI 由一个 JFrame 和一个主 JPanel 组成。 JPanel 使用 GridBagLayout 并由 JLabelJTextAreaJLabelJTextArea 组成。

GUI 在使用 DocumentListener 键入时处理句子。 DocumentListener 中的代码很简单,因为我在单独的类中处理句子。

这是我输入几个字符后的 GUI。

Pangram Analysis 2

还有几个字符

Pangram Analysis 3

最终结果

Pangram Analysis 4

说明

当我创建 Swing GUI 时,我使用 model / view / controller (MVC) 模式。这种模式使我能够将我的关注点分开,并一次专注于应用程序的一个部分。

我创建了一个模型类、一个视图类和一个控制器类。 PangramModel 模型类为任何输入句子 String 生成结果 StringPangramGUI 视图类创建 GUI。 SentenceDocumentListener 控制器类更新结果 JTextArea

最复杂的代码可以在模型类中找到。处理句子 String 的方法可能有很多种。这就是我编码的方式。

代码

这是完整的可运行代码。我将类设为内部类,这样我就可以将此代码作为一个块发布。

import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.util.ArrayList;
import java.util.List;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;

public class PangramGUI implements Runnable {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new PangramGUI());
    }
    
    private JTextArea sentenceArea;
    private JTextArea resultArea;

    @Override
    public void run() {
        JFrame frame = new JFrame("Pangram Analysis");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        frame.add(createMainPanel(),BorderLayout.CENTER);
        
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }
    
    private JPanel createMainPanel() {
        JPanel panel = new JPanel(new GridBagLayout());
        panel.setBorder(BorderFactory.createEmptyBorder(5,5,5));
        
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.anchor = GridBagConstraints.LINE_START;
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.insets = new Insets(5,5);
        gbc.weightx = 1.0;
        gbc.gridwidth = 1;
        
        gbc.gridx = 0;
        gbc.gridy = 0;
        JLabel label = new JLabel("Type the sentence to analyze");
        panel.add(label,gbc);
        
        gbc.gridy++;
        sentenceArea = new JTextArea(3,40);
        sentenceArea.setLineWrap(true);
        sentenceArea.setWrapStyleWord(true);
        sentenceArea.getDocument().addDocumentListener(
                new SentenceDocumentListener());
        panel.add(sentenceArea,gbc);
        
        gbc.gridy++;
        label = new JLabel("Pangram result");
        panel.add(label,gbc);
        
        gbc.gridy++;
        resultArea = new JTextArea(4,40);
        resultArea.setEditable(false);
        resultArea.setLineWrap(true);
        resultArea.setWrapStyleWord(true);
        panel.add(resultArea,gbc);
        
        return panel;
    }
    
    public class SentenceDocumentListener implements DocumentListener {
        
        private PangramModel model;
        
        public SentenceDocumentListener() {
            this.model = new PangramModel(); 
        }

        @Override
        public void insertUpdate(DocumentEvent event) {
            processSentence(sentenceArea.getText());
        }

        @Override
        public void removeUpdate(DocumentEvent event) {
            processSentence(sentenceArea.getText());
        }

        @Override
        public void changedUpdate(DocumentEvent event) {
            processSentence(sentenceArea.getText());
        }
        
        private void processSentence(String text) {
            String result = model.processSentence(text);
            resultArea.setText(result);
        }
        
    }
    
    public class PangramModel {
        
        private String alphabet; 
        
        public PangramModel() {
            this.alphabet = "abcdefghijklmnopqrstuvwxyz";
        }
        
        public String processSentence(String sentence) {
            int[] count = new int[alphabet.length()];
            
            for (int index = 0; index < sentence.length(); index++) {
                char c = Character.toLowerCase(sentence.charAt(index));
                int charIndex = alphabet.indexOf(c);
                if (charIndex >= 0) {
                    count[charIndex]++;
                }
            }
            
            if (isEmpty(count)) {
                return "Not a pangram";
            } else {
                List<Character> missingCharacters = getUnusedCharacters(count);
                if (missingCharacters.size() <= 0) {
                    return "A pangram";
                } else {
                    StringBuilder builder = new StringBuilder();
                    builder.append("Not a complete pangram");
                    builder.append(System.lineSeparator());
                    builder.append(System.lineSeparator());
                    builder.append("Missing characters: ");
                    for (int index = 0; index < missingCharacters.size(); index++) {
                        builder.append(missingCharacters.get(index));
                        if (index < (missingCharacters.size() - 1)) {
                            builder.append(",");
                        }
                    }
                    return builder.toString();
                }
            }
        }
        
        private boolean isEmpty(int[] count) {
            for (int index = 0; index < count.length; index++) {
                if (count[index] > 0) {
                    return false;
                }
            }
            
            return true;
        }
        
        private List<Character> getUnusedCharacters(int[] count) {
            List<Character> output = new ArrayList<>();
            for (int index = 0; index < count.length; index++) {
                if (count[index] <= 0) {
                    output.add(alphabet.charAt(index));
                }
            }
            
            return output;
        }
    }

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。