使用另一个类的ActionListener绘制形状

时间:2017-12-15 13:43:27

标签: java swing actionlistener paint

在我的程序中,我将要求JPanel中的矩形数量,并使用create按钮将它们添加到框架中。我想调用另一个类的矩形。但我看不到我的长方形。当我在我的主类中编写相同的paint方法时,我可以看到矩形,但是当我运行程序时它们会出现。我希望它们与actionlistener一起出现。我究竟做错了什么?这是我的课程;

矩形类:

library(microbenchmark)
library(stringr)

word <- sapply(sample(3:15, 1e6, replace=TRUE), function(nbchar) paste(sample(letters, nbchar, replace=TRUE), collapse=""))

Sotos <- function(word) paste0(' ', word, ' ')
Andre1 <- function(word) sub("(.*)"," \\1 ", word)
Andre2 <- function(word) suppressMessages(paste(message("very easy question"), word, message("very easy question")))
Cath1 <- function(word) paste(NULL, word, NULL)
Cath2 <- function(word) sprintf(" %s ", word)
strpad <- function(word) str_pad(word, width = nchar(word) + 2, side = "both")

microbenchmark(Sotos(word), Andre1(word), Andre2(word), Cath1(word), Cath2(word), strpad(word), unit="relative")

#         expr       min       lq     mean   median       uq       max neval   cld
#  Sotos(word) 1.2071789 1.190558 1.228668 1.190450 1.245905 1.0740482   100  b   
# Andre1(word) 2.9069459 2.731446 2.690268 2.711295 2.709019 2.1535507   100    d 
# Andre2(word) 0.9999499 1.002723 1.020524 1.000145 1.013569 0.7941186   100 a    
#  Cath1(word) 1.0000000 1.000000 1.000000 1.000000 1.000000 1.0000000   100 a    
#  Cath2(word) 1.4430192 1.403617 1.387463 1.402438 1.400566 1.1396474   100   c  
# strpad(word) 2.7101283 2.599947 2.789208 2.902455 2.942781 2.0281154   100     e

我的主要JFrame类:

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
public class Rectangle extends JFrame {

public int getX() {
    return x;
}
public void setX(int x) {
    this.x = x;
}
public int getY() {
    return y;
}
public void setY(int y) {
    this.y = y;
}
public int getW() {
    return w;
}
public void setW(int w) {
    this.w = w;
}
public int getH() {
    return h;
}
public void setH(int h) {
    this.h = h;
}
public Color getC() {
    return c;
}
public void setC(Color c) {
    this.c = c;
}
private int x,y,w,h;
private Color c;
private asgn3 a3;
public Rectangle() {


}

@Override
public void paint(Graphics g) {
super.paint(g); 

g.fillRect(getX(), getY(), getW(), getH());
g.setColor(Color.red);

}

}

1 个答案:

答案 0 :(得分:0)

  

当我在我的主要课程中编写相同的绘画方法时

什么涂料方法?你的所有代码都是创建一个Rectangle对象数组。你没有代码可以做任何绘画。

绘画的工作方式是覆盖JPanel的paintComponent()。因此,您需要为您的绘画创建自定义JPanel。然后创建一个Rectangle对象的ArrayList。在paintComponent()方法中,您遍历ArrayList并绘制每个Rectangle。

阅读Custom Painting上Swing教程中的部分,以获取一个简单示例,以帮助您入门。

您还可以查看Custom Painting Approaches中的DrawOnComponent示例。它演示了如何动态添加要绘制的Rectangle对象。每次要显示另一个Rectangle时,它都使用addRectangle(...)方法。