开发者社区> 问答> 正文

使我的输出画布仅显示[0,1]之间的值(Java)

具有以下GridBagLayout接口,接口Canvas内部带有类型,以便表示在[0,1]间隔之间标准化的随机生成的数字:

我发现了下一个问题:我的画布显示的值大于1,这意味着我看不到标准化点(x,y);因为它们对于实际的画布设置来说太小了。这就是我想要的:

如您所见,这些点是使用Lattice结构获得的。我该怎么做?

编辑:包括代码:

/**
 * Clase auxiliar empleada en interfazSimulacion.java para la representación de
 * nuestras simulaciones gráficas en el output. Hereda de la clase Canvas y
 * sobreescribe el método paint de dicha clase.
 * @author Fco Javier Perez Sanchez
 * @version 1.1
 * @since February 25, 2020
 */

import java.awt.*;
import java.awt.geom.*;
import java.math.BigDecimal;

public class Grafico extends Canvas{

public static int cantidadPuntos;
public static BigDecimal[] coordenadasX;
public static BigDecimal[] coordenadasY;

/**
 * Constructor principal del programa
 */

public Grafico(){
    setPreferredSize(new Dimension(600,600));
    setBackground(Color.decode("#202421"));
}

/**
 * Método que establece la cantidad de puntos y las coordenadas de los puntos en X e Y.
 * @param cantidad  cantidad de puntos a generar.
 * @param X coordenadas en X.
 * @param Y coordenadas en Y.
 */

public static void getPuntos(int cantidad, BigDecimal[] X, BigDecimal[] Y){

    cantidadPuntos = cantidad;

    coordenadasX = new BigDecimal[cantidadPuntos];
    coordenadasY = new BigDecimal[cantidadPuntos];
    coordenadasX = X;
    coordenadasY = Y;
}

/**
 * Método que sirve para dibujar las simulaciones deseadas.
 * @param graphic objeto de tipo graphics usado para dichas simulaciones.
 */

@Override

public void paint(Graphics graphic){
    graphic.setColor(Color.GREEN);

    //graphic.fillRect(10,10,10,10);
    Graphics2D nuevoOutput = (Graphics2D) graphic;


    for(int i = 0; i < cantidadPuntos-1; i = i+2){

        Rectangle2D rect;
        rect = (new Rectangle.Double(coordenadasX[i].doubleValue()%this.getWidth(), coordenadasY[i+1].doubleValue()%this.getHeight(), 3,3));

        nuevoOutput.fill(rect);
    }
}

问题来源:Stack Overflow

展开
收起
montos 2020-03-25 17:04:28 465 0
1 条回答
写回答
取消 提交回答
  • 对于您的问题无济于事,但是,Swing应用程序应该扩展JPanel而不是Canvas,并且应该通过重写paintComponent(…)而不是paint()进行自定义绘制。

    我看不到我的归一化点(x,y); 因为它们对于实际的画布设置来说太小了。

    如果您的数字介于[0,1]之间,是否不必将这些数字乘以面板的宽度/高度(而不是使用模数)来获得x / y整数点来进行绘画?

    最大值(1,1)失败

    好吧,如果该点从面板的边界开始并延伸3个像素,则该点将在面板的边界之外绘制,并且您将无法看到它。

    也许您需要将标准化值乘以(面板大小-3)?

    回答来源:Stack Overflow

    2020-03-25 17:44:21
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载