【问题标题】:how to pass value to paint method如何将值传递给paint方法
【发布时间】:2018-03-01 20:30:28
【问题描述】:

我在 Java 编码方面才刚刚起步,到目前为止,我可以在互联网上找到解决方案来解决我的问题,但这次我只是卡住了。 我想创建一个填充矩形的网格(图案),它工作正常,但是我想在特定位置更改矩形的颜色,这部分不起作用。我不知道为什么,我做错了什么?

// **file : MainWindow.java **
import java.util.Scanner;
import javax.swing.JFrame;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;

public class MainWindow {

    JFrame frame = new JFrame();
    int pos_X;
    int pos_Y;

    // constructor for frame
    public MainWindow (String title) {

    frame.setSize(1000, 1000);
    frame.setTitle(title);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    for (int i=0;i<26;i++){ // works fine
        for (int j=0;j<26;j++){         
        Shape shape = new Shape (110+i*20,110+j*20,19,19,5,100,220); //(x,y, width,height, R-colour, G-colour, B-colour)
        frame.add(shape);
        frame.setVisible(true); }}  

    pos_X= 15;
    pos_Y = 15;
    Shape shape = new Shape (110+pos_X*20,110+pos_Y*20,19,19,250,0,20); // it doesn't work ???
    frame.add(shape);   
    frame.setVisible(true);
    }

    public static void main(String[] args){
        new MainWindow(" my window ");
        }
}

// **file : Shape.java **
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.Color;
import java.awt.Color.*;
import javax.swing.JComponent;

public class Shape extends JComponent{
    int width, height, xcoord, ycoord, col_r, col_g,col_b;

    //constructor
public Shape (int x, int y ,int w,int h, int k, int l, int m) 
{
        this.width = w;
        this.height = h;
        this.xcoord = x;
        this.ycoord = y;
        this.col_r = k;
        this.col_g = l;
        this.col_b = m;
}
    public void paintComponent(Graphics g){
        Graphics2D g2d = (Graphics2D) g;
        Color x= new Color( col_r,col_g, col_b );
        g.setColor(x);
        g.fillRect(xcoord, ycoord, width, height);
    }
}

【问题讨论】:

  • 不能更改paint方法的签名,即传递一个附加参数。为什么不只是 Shape 构造函数的另一个参数?
  • 感谢您的回复,但可能我太新手了,无法理解您的提示。你能用更简单的方式解释一下吗?
  • 对不起,我刚刚意识到这个问题可能与绘画顺序有关。我发布了一个答案,希望对您有所帮助

标签: graphics jframe paint


【解决方案1】:

如果我理解正确,您可以确保在网格之后绘制形状,所以

pos_X= 15;
pos_Y = 15;
Shape shape = new Shape (110+pos_X*20,110+pos_Y*20,19,19,250,0,20); // it doesn't work ???
frame.setComponentZOrder(shape,0)
frame.add(shape);   
frame.setVisible(true);
        ...

请注意

frame.setComponentZOrder(shape,0)

确保彩色形状绘制在其他形状之上。 或者你的

附: 如果它不起作用,请尝试frame.setComponentZOrder(shape,frame.getComponentCount())

另请参阅here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-07
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多