Java 애플릿에서 그래프를 만들었으므로 g.fillRect가 화면과 자동 조정되도록하려고합니다. 나는 첫 번째 막대를 화면의 1/3로 만들고 서로 다른 막대의 크기를 반으로 줄이기를 원합니다.그래프를 자동으로 화면으로 가져 오기
g.fillRect(xpos, 550, width, hight);
각 막대 사이에 간격이 생기는 데 문제가있는 것 같습니다. 이 문제를 해결해 주시겠습니까? 미리 감사드립니다.
Java 애플릿에서 그래프를 만들었으므로 g.fillRect가 화면과 자동 조정되도록하려고합니다. 나는 첫 번째 막대를 화면의 1/3로 만들고 서로 다른 막대의 크기를 반으로 줄이기를 원합니다.그래프를 자동으로 화면으로 가져 오기
g.fillRect(xpos, 550, width, hight);
각 막대 사이에 간격이 생기는 데 문제가있는 것 같습니다. 이 문제를 해결해 주시겠습니까? 미리 감사드립니다.
당신은 각각의 바의 폭을 계산해야
barWidth = availableWidth/numberOfBars - 1
은 "-1"바 사이에 남아있을 것이고, 따라서, 다시 때 추가되어야하는 공간이있을 것 실제 좌표를 계산합니다. 당신은 그곳의 세부 사항들과 함께 시간을 보낼 수 있습니다 : 숫자들이 "훌륭하게 나누어 질"수 없다면, 막대는 다른 너비를 가져야 만합니다. 또는 홀수 크기를 보상하기 위해 왼쪽과 오른쪽에 작은 여백을 추가해야합니다 .
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class BarChart
{
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
createAndShowGUI();
}
});
}
private static void createAndShowGUI()
{
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().setLayout(new BorderLayout());
final JSlider slider = new JSlider(1, 50, 3);
final BarChartPanel barChartPanel = new BarChartPanel();
slider.addChangeListener(new ChangeListener()
{
@Override
public void stateChanged(ChangeEvent e)
{
barChartPanel.setNumberOfBars(slider.getValue());
}
});
f.getContentPane().add(slider, BorderLayout.NORTH);
f.getContentPane().add(barChartPanel, BorderLayout.CENTER);
f.pack();
f.setSize(600,600);
f.setVisible(true);
}
}
class BarChartPanel extends JPanel
{
private int numberOfBars = 3;
void setNumberOfBars(int n)
{
this.numberOfBars = n;
repaint();
}
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.BLUE);
Random random = new Random(0);
int barWidth = getWidth()/numberOfBars - 1;
int barsWidth = numberOfBars * (barWidth+1);
int offsetX = (getWidth() - barsWidth)/2;
for (int b=0; b<numberOfBars; b++)
{
int x = offsetX + b * (barWidth + 1);
int barHeight = random.nextInt(500);
int y = getHeight() - barHeight;
g.fillRect(x, y, barWidth, barHeight);
}
}
}
빠른 답장을 보내 주셔서 감사합니다. 프로그램에 코드를 구현하려하지만 원하는 효과가 없습니다. 확실히 내 편입니다. 내가 계속 노력할 수 있는지 계속 노력할 것입니다. – Joe
은 정확히 3 개 막대 막대 차트 대해 이야기 :
그러나, 여기에 하나 개의 가능한 솔루션의 빠른 스케치는 무엇입니까? – Marco13
막대의 양은 최대 28까지 달라질 수 있습니다. – Joe