0

SMS フォームを作成するコードを作成しました。テキスト領域が空のときにエラー メッセージを表示する機能を追加したいと考えています。コードに JOptionpane を入れましたが、プログラムを実行しても diologe が表示されません! ここに私のコードがあります

private void initialize() {
    frame = new JFrame("?????? ? ????? ?????");
    frame.setBounds(100, 100, 450, 300);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(null);

    JOptionPane optionPane = new JOptionPane();


    JPanel middlePanel = new JPanel();

    txtPath = new JTextField();
    txtPath.setBounds(150, 10, 200, 21);
    frame.getContentPane().add(txtPath);
    txtPath.setColumns(10);

    txtPath2 = new JTextField();
    txtPath2.setBounds(150, 65, 200, 21);
    frame.getContentPane().add(txtPath2);
    txtPath2.setColumns(20);

    JButton btnBrowse = new JButton("?????");
    btnBrowse.setBounds(5, 10, 87, 23);
    frame.getContentPane().add(btnBrowse);

    final JButton ok = new JButton("?????");
    ok.setBounds(250, 230, 87, 23);
    frame.getContentPane().add(ok);

    JButton cancel = new JButton("???");
    cancel.setBounds(110, 230, 87, 23);
    frame.getContentPane().add(cancel);


    final JTextArea textarea = new JTextArea();
    textarea.setBounds(50, 100, 300, 100);
    frame.getContentPane().add(textarea);
    textarea.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);




    JProgressBar progressBar = new JProgressBar(0, 100);
    progressBar.setSize(10, 1);
    progressBar.setForeground(Color.blue);
    frame.getContentPane().add(progressBar);





    btnBrowse.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            JFileChooser fileChooser = new JFileChooser();

            // For Directory
            fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);

            // For File
            //fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);

            fileChooser.setAcceptAllFileFilterUsed(false);

            int rVal = fileChooser.showOpenDialog(null);
            if (rVal == JFileChooser.APPROVE_OPTION) {
                txtPath.setText(fileChooser.getSelectedFile().toString());
                fileChooser.setFileFilter(new FileNameExtensionFilter("Text Files", "txt", "rtf"));

            }
        }
    });



   ok.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if(textarea.getLineCount()>=1)
            {


          test t=new test();
            ReadTextFile readTextFile=new ReadTextFile();
            t.testMethode(txtPath2.getText(), textarea.getText(),readTextFile.readFile(txtPath.getText()) );
        }
            else
                JOptionPane.showMessageDialog(null, "alert", "alert", JOptionPane.ERROR_MESSAGE);
        }
    });




        cancel.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                System.exit(0);
            }
        });


    }
    }
4

1 に答える 1

1

GUI はイベント駆動型の環境です。何かが起こると、あなたはそれに反応します。

ステートメントが実行されると、空白になる (テキストがない)ため、if-elseステートメントになることはありません。falsetextarea

send何らかのイベント (たとえば)に応答する必要があり、その時点でフォームを有効にするためにチェックを行います。

詳細については、Swing を使用した GUI の作成を参照してください。

例で更新

ここに画像の説明を入力

public class Example {

    public static void main(String[] args) {
        new Example();
    }

    public Example() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        private final JTextArea msg;

        public TestPane() {

            msg = new JTextArea(10, 20);
            JButton send = new JButton("Send");

            setLayout(new GridBagLayout());
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridwidth = GridBagConstraints.REMAINDER;

            add(new JScrollPane(msg), gbc);
            add(send, gbc);

            send.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    if (msg.getText().trim().length() > 0) {
                        // Send msg
                    } else {
                        JOptionPane.showMessageDialog(TestPane.this, "Please write something (nice)", "Error", JOptionPane.ERROR_MESSAGE);
                    }
                }
            });

        }

    }
}

OPによる回答の変更に基づいて更新

if(textarea.getLineCount()>=1)常に戻りtrueます。msg.getText().trim().length() > 0代わりに使用して、JTextAreaテキストが含まれているかどうかを判断してください...

更新しました

mKobel は優れた点を指摘しています。nullレイアウトの使用は避けるべきです。アプリケーションが動作するために必要なフォント サイズや画面 DPI/解像度を制御することはできません。レイアウト マネージャーは当て推量を取り除きます。

詳細については、レイアウト マネージャーのビジュアル ガイドとレイアウト マネージャー使用をご覧ください。

于 2013-08-12T05:28:20.143 に答える