简体   繁体   English

在java中画一条黑线

[英]Draw a black line in java

Below is the project where I'm working on. 以下是我正在进行的项目。

The problem is in the method Plotline(). 问题出在方法Plotline()中。 This method takes three variables and has to use these variables to draw a black line which should not go beyond the width and the length of the JLable. 此方法需要三个变量,并且必须使用这些变量绘制一条黑线,该线不应超出JLable的宽度和长度。

Im trying to do it in a for loop but i don't know how to make de relation between variables and the objects in this project. 我试图在for循环中这样做,但我不知道如何在变量和该项目中的对象之间建立de关系。

The project runs through another class that is NewJFrame.java 该项目运行另一个NewJFrame.java类

import java.awt.Color;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JLabel;

public class Image {
  private JLabel          label;
  private BufferedImage   image;
  private Color           color;
  private Color[][]       color_array;
  private Color[][]       temp_array;

public Image(JLabel _label, Color _color)
{
    label = _label;
    image           = new bufferedImage(label.getHeight(),label.getWidth(),BufferedImage.TYPE_INT_ARGB);
    color_array     = new Color[label.getWidth()][label.getHeight()];       
    color = _color;
    Background();
    Draw();
}

public void Background()
{
    for(int i = 0; i < color_array.length ; i++)
        for(int j = 0; j < color_array[i].length; j++)
            color_array[i][j] = color;

}
public void Plotline(int _x1, int _x2, int _y)
{
    Color tmp_color = new Color(0);
    for(int i=0; i <color_array.length-1; i++){
        Draw();
    }

}

public void Draw()
{
    for(int i = 0; i < color_array.length ; i++)
        for(int j = 0; j < color_array.length; j++)
            image.setRGB(i, j, color_array[i][j].getRGB());
    label.setIcon(new ImageIcon(image));
    label.repaint();
}
}

You are right. 你是对的。 There is no connection between your variables in different methods. 不同方法中的变量之间没有联系。 They should connect via some parameter or class variable. 它们应该通过一些参数或类变量连接。 Actually it shouldn't be such complicated. 实际上它不应该这么复杂。 One method is quite enough to draw your line. 一种方法足以绘制你的线。 Here is fixed code: 这是固定代码:

import java.awt.Color;
import java.awt.image.BufferedImage;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Test {

    public Test() {
        JFrame frame = new JFrame("Test");
        JLabel label = new JLabel("Hello, World!");
        frame.add(label);

        frame.setSize(300, 200);
        frame.setVisible(true);

        new Image(label, Color.BLACK).Plotline(10, 90, 100);
        frame.repaint();
    }

    public static void main(String a[]) {
        new Test();
    }
}

// /
class Image {
    private JLabel label;
    private BufferedImage image;
    private Color color;
    private Color[][] color_array;
    private Color[][] temp_array;

    public Image(JLabel _label, Color _color) {
        label = _label;
        image = new BufferedImage(label.getHeight(), label.getWidth(),
                BufferedImage.TYPE_INT_ARGB);
        color_array = new Color[label.getWidth()][label.getHeight()];
        color = _color;
        Background();
    }

    public void Background() {
        for (int i = 0; i < color_array.length; i++) {
            for (int j = 0; j < color_array[i].length; j++) {
                color_array[i][j] = color;
            }
        }
    }

    public void Plotline(int _x1, int _x2, int _y) {
        int black_color = new Color(0).getRGB();
        for (int i = _x1; i < color_array.length - 1 && i < _x2; i++) {
            if (_y >= 0 && _y < color_array[i].length)
                image.setRGB(i, _y, black_color);
        }
        label.setIcon(new ImageIcon(image));
        label.repaint();
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM