編輯為 MRE。我不太確定如何在不擴展 JFrame 或 JPanel 的情況下撰寫代碼。這將重現我看到的相同錯誤。我正在嘗試在 JPanel 上渲染條形圖,但似乎只繪制了 PlotPanel 類中 for 回圈的最后一次迭代。
package com.company;
import java.awt.*;
import javax.swing.*;
public class VisualizeAlgorithms {
public static int initPosX = 0;
public static int initPosY = 0;
public static int numBars = 200;
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
PlotFrame frame = new PlotFrame();
});
}
}
class PlotFrame extends JFrame {
PlotPanel plotPanel;
PlotFrame() {
plotPanel = new PlotPanel();
this.add(plotPanel);
this.setTitle("Plot");
this.setBackground(Color.DARK_GRAY);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.pack();
this.setVisible(true);
this.setResizable(false);
this.setLocationRelativeTo(null);
}
public int[] createArray(int numBars) {
int[] numsArray = new int[numBars];
for (int i = 0; i < numBars; i ) {
numsArray[i] = i 1;
}
return numsArray;
}
}
class PlotPanel extends JPanel{
static final int PLOT_WIDTH = 1200;
static final int PLOT_HEIGHT = 800;
static final int MAX_BAR_HEIGHT = PLOT_HEIGHT;
static final int BAR_WIDTH = PLOT_WIDTH / VisualizeAlgorithms.numBars;
Dimension plotSize = new Dimension(PLOT_WIDTH, PLOT_HEIGHT);
PlotPanel() {
this.setPreferredSize(plotSize);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.CYAN);
draw(g);
}
public void draw(Graphics g){
int numBars = VisualizeAlgorithms.numBars;
for (int i = 0; i < numBars; i ) {
g.fillRect(BAR_WIDTH * i, VisualizeAlgorithms.initPosY, BAR_WIDTH, ((i 1)/numBars)*(MAX_BAR_HEIGHT));
}
}
}
uj5u.com熱心網友回復:
不確定我是否可以接受評論作為答案,所以我在這里發布了答案。它確實將矩形高度更改為int h = ((i 1)*MAX_BAR_HEIGHT/numBars). 感謝@AndrewThompson 和@c0der 不僅提供了答案,還提供了其他資訊。
旁白:@c0der 給出了很好的建議,“如有疑問,請列印出來”。我建議使用此更改:
public void draw(Graphics g){
int numBars = VisualizeAlgorithms.numBars;
for (int i = 0; i < numBars; i ) {
int x = BAR_WIDTH * I;
int y = VisualizeAlgorithms.initPosY;
int w = BAR_WIDTH;
int h = ((i 1)/numBars)*(MAX_BAR_HEIGHT);
System.out.println(String.format("x,y WxH: %1s,%1s %1sx%1s", x,y,w,h));
g.fillRect(x,y,w,h);
}
}
(列印用于 fillRect 的值)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/386982.html
上一篇:清除我的jpanel后我無法畫畫
