【问题标题】:Why Does Implementing an ActionListener make the applet shrink(virtually)?为什么实现 ActionListener 会使小程序缩小(实际上)?
【发布时间】:2014-07-14 15:27:12
【问题描述】:

我最近在 java 中创建了一个 MakeDots 类,当您拖动鼠标时,它会生成点(耶!)。我为此实现了一个 MouseMotionListener。它工作得很好。然后我添加了一些按钮来改变点的颜色。我为此添加了 ActionListeners。一旦我这样做了,颜色改变就起作用了,但我只能在按钮的非常小的边框上画!为什么会这样?我如何解决它?如果您需要我发布我的代码,请在 cmets 中说,我会这样做。

代码:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.applet.Applet;
import java.awt.Button;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;


public class MakeDots extends Applet implements MouseMotionListener{
    private Graphics graphics = null;
    private Color dotColor = Color.red;
    private Button setRed;
    private Button setPink;
    private Button setPurple;
    private Button clrBtn;
    public void init() {
        setRed = new Button("Red");
        setPink = new Button("Pink");
        setPurple = new Button("Purple");
        clrBtn = new Button("Clear");
        this.addMouseMotionListener(this);
        this.add(setRed);
        this.add(setPink);
        this.add(setPurple);
        this.add(clrBtn);
        setRed.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                dotColor = Color.red;
            }
        });
        setPink.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                dotColor = Color.pink;
            }
        });
        setPurple.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                dotColor = new Color(80, 0, 80);
            }
        });
        clrBtn.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                clear();
            }

        });
    }

    public void paint(Graphics g) {
        this.setSize(new Dimension(800, 600));
        graphics = g.create();
        clear();
    }
    public void drawDot(int x, int y) {
        graphics.setColor(dotColor);
        graphics.fillOval(x, y, 10, 10);
    }


    public void clear() {
        Dimension d = this.getSize();
        graphics.setColor(Color.WHITE);
        graphics.fillRect(0, 0, d.width, d.height);
    }


    @Override
    public void mouseDragged(MouseEvent e) {
            int mouseX = e.getX();
            int mouseY = e.getY();
            drawDot(mouseX, mouseY);
    }

    @Override
    public void mouseMoved(MouseEvent arg0) {
        // TODO Auto-generated method stub

    }
}

【问题讨论】:

  • 如果您需要帮助,我认为您需要发布您的代码
  • 您将按钮添加到绘图画布,按钮将消耗鼠标事件。尝试将按钮添加到自己的容器中,并将绘图表面和按钮布局到主容器的不同区域
  • @MadProgrammer 你能举个例子吗?我不太明白你……
  • 您已将按钮添加到您尝试绘制的同一表面,您需要将它们分开到不同的容器中。为什么要使用基于 AWT 的 API?它已经过时了 15 年以上。您也不应该维护对 Graphics 上下文的引用并在绘制周期之外绘制......

标签: java applet awt actionlistener mousemotionlistener


【解决方案1】:

您可能想做的事情很少。
每次添加actionListener() 时,都不要写actionPerformed(...)。只需使用getActionCommand() 来检查哪个按钮触发了事件。另外,创建Color() 的全局对象并在actionPerformed() 中更新它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    • 2020-12-19
    • 2016-10-29
    • 1970-01-01
    相关资源
    最近更新 更多