gpt4 book ai didi

java - 使用事件更改绘图程序中线条的颜色

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:54:13 25 4
gpt4 key购买 nike

我正在尝试创建一个使用点画线的程序。我已经完成了这一点。当程序最小化并再次最大化时,这条线需要重新绘制。这是我的第一个问题发生的地方。假设我画了 2 条线,第一条线的最后一个点和第二条线的第一个点在最大化时连接在一起。

然而,这不是我的主要问题。我想实现一个键处理程序,也就是说,当按下键 1-9 时,每个键代表该行的不同颜色变化。我已经尝试实现一个 key 处理程序,但显然出现了问题,因为我无法让它正常工作。任何帮助,将不胜感激。我的代码如下所示。



包第 2 部分;

导入 javax.swing.*;
导入 java.awt.*;
导入 java.awt.event.KeyEvent;
导入 java.util.ArrayList;
导入java.awt.Point;
导入 java.awt.Color;

公共(public)类 ScribbleComponentRepaint 扩展 JComponent 实现 Scribbler {
int w = 640;
整数 h = 360;
c点;
ArrayList 线;
ArrayList > 行;

public static void main(String[] args) {
ScribbleComponentRepaint sc = new ScribbleComponentRepaint();
新的 JEasyFrame(sc,“涂鸦”);
sc.addMouseListener(新唱首歌(sc));
sc.addMouseMotionListener(新移动器(sc));
sc.addKeyListener(新键(sc));
}

公共(public) ScribbleComponentRepaint() {
line = new ArrayList ();
lines = new ArrayList >();
}

public void handleKey(int e) {

开关(e){
案例 KeyEvent.VK_1:

休息;
默认: {
System.out.println("默认");
}
}
}


public void paintComponent(Graphics g) {
for (ArrayList line : lines) {
诠释 n = 0;
整数限制= 1;
如果 (line.size() > 0) {
对于(点 p :线){
点 c = line.get(Math.max(n - limit, 0));
n++;
g.setColor(Color.RED);
g.drawLine(c.x, c.y, p.x, p.y);
}
}
}
}

public void penDown(Point p) {
c = p;

}

public void penUp(Point p) {
画到(p);
c = 空;

}

public void drawTo(Point p) {
如果(c!=空){
图形 g = getGraphics();
g.setColor(Color.BLUE);
g.drawLine(c.x, c.y, p.x, p.y);
c = p;
}
line.add(c);
lines.add(线);

}

public void drag(Point p) {
//不应该为空
画到(p);
}


公共(public)维度 getPreferredSize() {
返回新维度(w,h);
}

}



包第 2 部分;

导入 java.awt.event.KeyAdapter;
导入 java.awt.event.KeyEvent;

公共(public)类 key 扩展 KeyAdapter {

涂鸦者;

公钥(Scribbler sc){
这个.sc = sc;
}

public void keyPressed(KeyEvent e) {
//System.out.println(k);
sc.handleKey(e.getKeyCode());
}
}



包第 2 部分;

导入 java.awt.*;

公共(public)接口(interface) Scribbler {
public void paintComponent(Graphics g);
public void penDown(Point p);
public void drag(Point p);
public void penUp(Point p);
public void handleKey(int e);
}

最佳答案

在主程序结束时:

    sc.setFocusable(true);
sc.requestFocusInWindow();

顺便说一句

  • 应在 EDT 上构建 GUI。
  • 考虑使用键绑定(bind)代替 KeyListener
  • 设计精美的代码(既定义了接口(interface)又对其进行了编码),但为了尽快获得更好的帮助,请发布 SSCCE .我不得不对代码进行一些更改,然后才能测试我的理论,即检测键的问题是“焦点”。

关于java - 使用事件更改绘图程序中线条的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9749660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com