我在Java applet中創建了一個圖形,並試圖讓g.fillRect使用屏幕自動調整。我希望第一個酒吧成爲屏幕的三分之一,然後將每個酒吧的面積減半。獲取圖形以自動調整屏幕
g.fillRect(xpos, 550, width, hight);
我似乎有一個與每個酒吧之間的差距問題。你能幫我解決這個問題嗎?提前致謝。
我在Java applet中創建了一個圖形,並試圖讓g.fillRect使用屏幕自動調整。我希望第一個酒吧成爲屏幕的三分之一,然後將每個酒吧的面積減半。獲取圖形以自動調整屏幕
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