0

ボタンを押して更新するのではなく、すぐに表示に更新されるテキストフィールドの入力を変更したいENTER

これが私のコードです。

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

public class MyProgram01 extends JFrame
{
    private JTextField text1;
    private JCheckBox check1;
    private JCheckBox check2;
    private String message;
    private JLabel label1;
    private JLabel label2;
    private Font font;

    public MyProgram01(String title)
    {
        super(title);
        check1 = new JCheckBox("Bold");
        check2 = new JCheckBox("Italics");

        label1 = new JLabel("Text : ");
        label2 = new JLabel("Style : ");
        message = "Good Morning...";
        text1 = new JTextField(message, 100);
        font = new Font("Times New Roman", Font.PLAIN, 36);
        setBounds(0, 0, 600, 300);

        JPanel panel = new JPanel();
        panel.setLayout(null);
        panel.setBounds(0, 0, 600, 120);
        panel.setBackground(Color.ORANGE);
        label1.setFont(new Font("Times New Roman", Font.PLAIN, 36));
        label1.setBounds(15, 15, 100, 36);
        panel.add(label1);
        text1.setBounds(120, 15, 400, 36);
        panel.add(text1);

        label2.setFont(new Font("Times New Roman", Font.PLAIN, 36));
        label2.setBounds(15, 65, 100, 36);
        panel.add(label2);
        check1.setBounds(120, 65, 100, 36);
        check2.setBounds(220, 65, 100, 36);
        panel.add(check1);
        panel.add(check2);

        check1.addActionListener(new CheckBoxListener());
        check2.addActionListener(new CheckBoxListener());
        text1.addActionListener(new TextFieldListener());

        setLayout(null);
        add(panel);
    }
    public void paint(Graphics g)
    {
        super.paint(g);

        g.setFont(font);
        g.drawString(message, 15, 255);

    }
    private class CheckBoxListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            if(check1.isSelected() && check2.isSelected())
            {
                font = new Font("Times New Roman", Font.BOLD + Font.ITALIC, 36);    
                repaint();
            }
            else if(check1.isSelected())
            {
                font = new Font("Times New Roman", Font.BOLD, 36);
                repaint();
            }
            else if(check2.isSelected())
            {
                font = new Font("Times New Roman", Font.ITALIC, 36);
                repaint();
            }
            else
            {
                font = new Font("Times New Roman", Font.PLAIN, 36);
                repaint();
            }
        }
    }
    private class TextFieldListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            message = text1.getText();
            repaint();
        }
    }
    public static void main(String[] args)
    {
        JFrame frame = new MyProgram01("My Program 01");
        frame.setVisible(true);
        frame.setResizable(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}    

コードを変更して、ディスプレイを即座に更新するにはどうすればよいですか?

編集 :

これはkeyListenerで動作しますが、私のプログラムは2番目のキーが押された後にのみ表示を開始します。

たとえば、を入力すると、プログラムはを押すと表示をabc開始しa、を押すbと、を押さない限り、プログラムがc表示されて表示されなくなります。abcENTER

ここにコードの一部があります:

text1.addKeyListener(new KeyAdapter()
    {
            public void keyPressed(KeyEvent e)
            {
                message = text1.getText();
                repaint();
            }
    });
4

2 に答える 2

3

KeyListenerテキストフィールドに a を追加します。次のようにできます。

textField.addKeyListener(new KeyAdapter(){
    @Override
    public void keyPressed(KeyEvent e){
         message = textField.getText();
         repaint();
    }
});     

また

DocumentListenerテキストフィールドのに a を追加しますDocument。次のようにできます。

private JFrame getFrame(){
    return this;
}
...

textField.getDocument().addDocumentListener(new DocumentListener(){

    @Override
    public void insertUpdate(DocumentEvent e) {
        message = textField.getText();
        getFrame().repaint();
    }

    @Override
    public void removeUpdate(DocumentEvent e) {
        message = textField.getText();
        getFrame().repaint();
    }

    @Override
    public void changedUpdate(DocumentEvent e) {
        // on change
    }

});
于 2012-05-09T03:53:02.297 に答える
2

クラス TextFieldListener に ActionListener を使用する代わりに、KeyListener インターフェイスを使用し、keyTyped(KeyEvent e) メソッドを使用します。イベントが発生するたびに、texfield の getText() を使用して再描画できます。

于 2012-05-09T04:06:09.863 に答える