文本框无法正常工作

时间:2014-07-27 04:10:02

标签: java applet jbutton textfield

我为applet编写了一个程序,当你按下按钮时,该程序应该在文本框中显示不同的文本。编译时我的程序没有错误,但文本框无法正确显示。我不知道它有什么问题。这是我的代码

import java.awt.*;
import java.awt.event.*;

public class colors{
Button button1;
Button button2;
Button button3;
Label label1;
TextField objTextField1; 

public static void main (String args[]){
colors c = new colors();
}
public colors() {
Frame f = new Frame ("Colors");
Button button1 = new Button("Blue");
button1.setBounds(10,305,120,75);
button1.addMouseListener(new MyMouseListener1());
Button button2 = new Button("Red");
button2.setBounds(140,305,120,75);
button2.addMouseListener(new MyMouseListener2());
Button button3 = new Button("Yellow");
button3.setBounds(270,305,120,75);
button3.addMouseListener(new MyMouseListener3());

f.add(button1);
f.add(button2);
f.add(button3);

label1 = new Label("Click a Button to Reveal Text");
label1.setBounds(20,105,200,25);
f.add(label1);


objTextField1 = new TextField("Which Color?", 15);
objTextField1.setBounds(20,75,125,50);
f.add(objTextField1);

f.add(label1);
f.add(objTextField1);

f.addWindowListener(new WindowAdapter()
{
    public void windowClosing(WindowEvent we){
        System.exit(0);
    }
});
f.setSize(400,400);
f.setVisible(true);
}
public class MyMouseListener1 extends MouseAdapter{
        public void mouseClicked(MouseEvent me){
            objTextField1.setText("Blue");
        }
    }
public class MyMouseListener2 extends MouseAdapter{
        public void mouseClicked(MouseEvent me){
            objTextField1.setText("Red");
        }
}

public class MyMouseListener3 extends MouseAdapter{
    public void mouseClicked(MouseEvent me){
        objTextField1.setText("Yellow");
        }
    }
}

3 个答案:

答案 0 :(得分:2)

点击Button后会触发ActionEvent

您应该使用ActionListener代替MouseListener

public void actionPerformed(ActionEvent e) { 
    ...//code that reacts to the action... 
}

AND 不要忘记添加

button.addActionListener(instance);

答案 1 :(得分:1)

我已经测试了您的代码并且它按预期工作但我注意到代码中的一些要点如下所述:

答案 2 :(得分:1)

要创建一个applet,你应该扩展 javax.swing.JApplet class&覆盖 init()方法。

要更改颜色,您必须在 ActionListener actionPerformed()中编写逻辑。但它是一个界面。因此,您可以使用 Anonymous Inner class &在其中实施 actionPerformed()

因此,当您在 JButton 上调用 addActionListener()时,我建议您使用匿名内部类来执行此操作。通过以下代码可以更清楚。

我的建议:无论何时编写代码,都要始终牢记 OOD原则。这不是讨论这个问题的正确场所,但您的代码有代码气味代码重复

以下是做你想做的事情的最好方法。我们还使用 DRY原则

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;

public class ColorChanger extends javax.swing.JApplet {

    private JPanel mainPanel;

    private JButton btnRed;
    private JButton btnGreen;
    private JButton btnBlue;

    @Override
    public void init() {
        super.init();
        mainPanel = new JPanel();

        btnRed = new JButton("Red");
        btnGreen = new JButton("Green");
        btnBlue = new JButton("Blue");

        this.add(mainPanel);
        mainPanel.add(btnRed);
        mainPanel.add(btnGreen);
        mainPanel.add(btnBlue);

        bindActionEvent(btnRed, Color.RED);
        bindActionEvent(btnGreen, Color.GREEN);
        bindActionEvent(btnBlue, Color.BLUE);

    }

    private void bindActionEvent(JButton b1, Color color) {

        b1.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                mainPanel.setBackground(color);
                //Write setText() for your TextField here.
            }
        });
    }       //END Of Helper Method
}