【问题标题】:Text Box not working properly文本框无法正常工作
【发布时间】:2014-07-27 04:10:01
【问题描述】:

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

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");
        }
    }
}

【问题讨论】:

  • 你应该使用Swing components而不是AWT组件
  • 我测试了您的代码,它按预期工作。 ?*文本框显示不正确*这行是什么意思?

标签: java applet jbutton textfield


【解决方案1】:

当点击Button 时,它会触发ActionEvent

您应该使用ActionListener 而不是MouseListener

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

AND别忘了加

button.addActionListener(instance);

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      要制作小程序,您应该扩展 javax.swing.JApplet 类并覆盖 init() 方法。

      要更改颜色,您必须在 ActionListeneractionPerformed() 中编写逻辑。但它是一个接口。所以,你可以利用 Anonymous Inner class 并在其中实现 actionPerformed()

      因此,当您在 JButton 上调用 addActionListener() 时,我建议您使用 Anonymous Inner 类 来执行此操作。通过下面的代码会更清楚。

      我的建议:每当您编写代码时,请始终牢记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
      }
      

      【讨论】:

        猜你喜欢
        • 2012-03-18
        • 1970-01-01
        • 2015-12-13
        • 2022-01-08
        • 1970-01-01
        • 2016-05-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多