我为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");
}
}
}
答案 0 :(得分:2)
点击Button
后会触发ActionEvent
。
您应该使用ActionListener
代替MouseListener
。
public void actionPerformed(ActionEvent e) {
...//code that reacts to the action...
}
AND 不要忘记添加
button.addActionListener(instance);
答案 1 :(得分:1)
我已经测试了您的代码并且它按预期工作但我注意到代码中的一些要点如下所述:
使用setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
代替System.exit(0)
并添加WindowListener
以关闭窗口。
根据组件的首选尺寸,使用符合组件的frame.pack()
代替frame.setSize()
。
不要使用null
布局,也不要通过调用setBounds()
来使用绝对定位,而是使用适合您应用程序设计的布局管理器。
使用SwingUtilities.invokeLater()或EventQueue.invokeLater()确保EDT已正确初始化。
了解更多
遵循Java命名约定
保留实例成员private
@TAsk已经解决了如果您只对ActionListener
方法感兴趣,那么您应该使用MouseListener
代替mouseClicked()
。
您应该使用Swing组件而不是@peeskillet已经提到的AWT组件
答案 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
}