gpt4 book ai didi

java - 在 JComponent 中仅显示一个对象

转载 作者:行者123 更新时间:2023-12-01 15:33:36 25 4
gpt4 key购买 nike

嘿伙计们,抱歉,我对编程有点陌生,但我的 BarChart 程序遇到了一个小问题。一切似乎都运行正常。我想要做的是输入一些整数,然后让我的程序生成图像来表示数据的形式。如果我输入几个数字,则只会出现一张图像。请帮帮我!

PS。我知道我可以在 BarChart 类中只使用一个 PaintComponent 方法,但我的教授特别希望类中只包含这两个方法。

import javax.swing.JFrame;
import java.util.Scanner;
public class BarChartTester
{
public static void main(String[] args)
{

BarChartPaintComponent component = new BarChartPaintComponent();
Scanner in = new Scanner(System.in);
BarChart test = new BarChart();
System.out.println("Enter the Values you wish to use ( >0 ). Press -1 on an empty line to stop");
Boolean flag = false;
while(!flag)
{
double numbers = in.nextDouble();
if(numbers == -1)
flag = true;
else if(numbers<-1)
System.out.println("You have typed in invalid number");
else
component.add(numbers);
}
JFrame frame = new JFrame();
frame.setSize(300, 300);
frame.setTitle("A Bar Graph");
frame.add(component);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Line2D;
import java.awt.geom.*;
import javax.swing.JComponent;
import java.util.ArrayList;

public class BarChart extends JComponent
{
private ArrayList<Double> list;
private double value;
private int i;

public BarChart()
{

list = new ArrayList<Double>();
}


public void add(double value)
{
list.add(i, value);
i++;
}

public void draw(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;

Double greatest = list.get(0);
Double least;
for(int j =1;j<list.size();j++)
{
if(list.get(j)> greatest)
greatest = list.get(j);
else
least = list.get(j);
}

for(int i = 0;i<list.size();i++)
{
int x = 10;
int width = 20;
double barNumber = list.get(i);
if(barNumber == greatest){
g2.setPaint(Color.BLUE);
g2.fill(new Rectangle2D.Double(x,0,width,300));
}
else
{
g2.setPaint(Color.BLUE);
g2.fill(new Rectangle2D.Double(x,0,width, barNumber));
}

x +=20;

}



}
}

import java.awt.Graphics;
import java.awt.Graphics2D;


public class BarChartPaintComponent extends BarChart
{
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
this.draw(g);
}
}

最佳答案

int x = 10;

这应该移出 for 循环。它每次都被初始化为相同的值,因此所有条形图都绘制在同一位置。

如果您刚刚在 for 循环中添加了 System.out.println(x);,问题就很明显了。

关于java - 在 JComponent 中仅显示一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9243954/

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