我有一个100个随机整数的数组。我想从他们创建一个条形图。我知道如何在框架中创建单个矩形,但不传递值。
这是绘画类:
import javax.swing.*;
import java.awt.*;
public class draw extends JPanel
{
public void drawing() {
repaint();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLUE);
g.fillRect(100, 150, 12, 3);
}
}
我想用随机的int值替换g.fillRect(100,150,12,3)中的值。但由于我从main调用repaint()来调用paintComponent,因此无法将值传递给paintComponent。我该怎么做?如果不可能,我有什么选择?
答案 0 :(得分:0)
您可以通过引入字段并初始化然后使用构造函数,setter或这两者来实现:
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
public class Draw extends JPanel {
int x, y, width, height;
public Draw(int x, int y, int width, int height) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
void setX(int x) {this.x = x;}
void setY(int y) {this.y = y;}
void setWidth(int width) {this.width = width;}
void setHeight(int height) {this.height = height;}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLUE);
g.fillRect(x, y, width, height);
}
}
答案 1 :(得分:0)
如何将值传递给paintComponent
您不能将值传递给paintComponent()
。
但是由于我从main调用repaint()来调用paintComponent,所以无法将值传递给paintComponent。我该怎么办?
对于您要自定义和绘制的任何对象,都可以为其创建一个类,并使用类似draw()
的方法进行绘画,例如:
//Just a normal class with a draw() method
class BarGraph{
private int x;
private int y;
private int width;
private int height;
private Color color;
public BarGraph(int x, int y, int width, int height){
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
public void setColor(Color color){
this.color = color;
}
public void draw(Graphics g){
g.setColor(color);
g.fillRect(x, y, width, height);
}
}
然后在主面板中显示自定义图像:
class DrawingSpace extends JPanel{
private BarGraph barGraph;
public DrawingSpace(){
barGraph = new BarGraph(50, 50, 400, 100);
barGraph.setColor = (Color.RED);
}
@Override
public void paintComponent(Graphics g){
super.paintComponent(g){
barGraph.draw(g); //draw your own customized object
}
}
}
因此,您可以尝试在自己的类(本例中为BarGraph类)中传递/设置值,而不是尝试通过传递值来指示paintComponent的绘制方式。从“图形”内容中,实现您希望如何绘制它。
在您的paintComponent中,只需调用draw方法,该方法已经具有有关如何绘制的“一组指令”。
答案 2 :(得分:0)
我们无法将值作为参数传递给paintComponent
方法,因为我们只是覆盖了Swing调用的现有方法。但是我们可以在该类中有一个实例变量(在我的示例中为values
),可以在paintComponent
方法内部进行访问(如其他答案/评论所建议)。
我在下面放置一个示例程序,因为有时示例可以更好地传达想法。
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
public class BarGraph extends JPanel
{
private static final int GRAPH_HEIGHT = 300;
private static final int BAR_WIDTH = 50;
private static final int GAP_BETWEEN_BARS = 20;
private static final int GRAPH_X_OFFSET = 50;
private int[] values;
public BarGraph(int[] values)
{
this.values = values;
}
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.BLUE);
for (int i = 0; i < values.length; i++)
{
g.fillRect(
GRAPH_X_OFFSET + (i * (GAP_BETWEEN_BARS + BAR_WIDTH)),
GRAPH_HEIGHT - values[i],
BAR_WIDTH,
values[i]
);
}
}
public static void main(String[] args)
{
int[] graphValues = {100, 150, 50, 250, 200, 75};
JFrame frame = new JFrame("Graph");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new BarGraph(graphValues), BorderLayout.CENTER);
frame.setBounds(300, 200, 600, 400);
frame.setVisible(true);
}
}