作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这应该是一个抽象类,可以扩展以绘制连接 JPanel 上某些坐标点的线。
但是,永远不会调用专门的 PaintComponents() 方法。我已经看到其他答案并尝试使用他们的解决方案,例如检查我是否添加了 JPanel 或者是否有布局。然而,PaintComponent() 仍然没有被调用,屏幕上也没有显示任何内容。
import java.awt.*;
import java.util.*;
import javax.swing.*;
public abstract class XYGrapher
{
private ArrayList<Coordinate> coordinates;
int xStart;
int yStart;
int width;
int height;
public class GraphPanel extends JPanel
{
@Override
public void paintComponents(Graphics g)
{
super.paintComponents(g);
g.setColor(Color.green);
g.drawLine(xStart, yStart + height / 2, xStart + width, yStart + height / 2);
g.drawLine(xStart + width / 2, yStart, xStart + width / 2, yStart + height);
g.setColor(Color.black);
for(int i = 0; i < coordinates.size() - 1; i++)
{
Coordinate prev = coordinates.get(i);
Coordinate next = coordinates.get(i + 1);
if(prev.drawFrom() && next.drawTo())
{
g.drawLine((int) prev.getX(), (int) prev.getY(), (int) next.getX(), (int) next.getY());
}
}
}
}
public abstract Coordinate xyStart();
public abstract double xRange();
public abstract double yRange();
public abstract Coordinate getPoint(int pointNum);
public void drawGraph(int xPixelStart, int yPixelStart, int pixelsWide, int pixelsHigh)
{
int i = 0;
xStart = xPixelStart;
yStart = yPixelStart;
width = pixelsWide;
height = pixelsHigh;
double X0 = xyStart().getX();
double Y0 = xyStart().getX();
ArrayList<Coordinate> points = new ArrayList(0);
ArrayList<Coordinate> mapped = new ArrayList(0);
while(getPoint(i) != null)
{
points.add(getPoint(i));
i++;
}
for(int j = 0; j < points.size(); j++)
{
double X1 = points.get(j).getX();
double Y1 = points.get(j).getY();
boolean df = points.get(j).drawFrom();
boolean dt = points.get(j).drawTo();
int X = (int) (xPixelStart + (X1 - X0) * (pixelsWide / xRange()));
int Y = (int) (yPixelStart + (Y0 + yRange() -Y1) * (pixelsHigh / yRange()));
mapped.add(new Coordinate(X, Y, df, dt));
}
coordinates = mapped;
for(int k = 0; k < coordinates.size(); k++)
{
Coordinate test = coordinates.get(k);
Coordinate or = points.get(k);
System.out.println(test.getX() + " " + test.getY());
System.out.println(or.getX() + " " + or.getY());
}
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new GridLayout(0,1)
JPanel graph = new GraphPanel();
graph.setLayout(new GridLayout(0, 1));
frame.setContentPane(graph);
frame.pack();
frame.setVisible(true);
}
}
最佳答案
我认为“paintComponenents()”方法应该是“paintComponent()”。
关于java - PaintComponents() 从未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20535982/
背景 我最近在 merge 期间遇到了一个意外未 merge 的文档文件的问题。 无论出于何种原因,我搞砸了 merge 并有效地删除了文件(和其他几个文件),因为我忘记了它们的存在。 现在我想查看我
我在我的网站上使用旧的 mysql 版本和 php 版本 4。 我的表结构: | orders_status_history_id | orders_id | orders_status_id |
我是一名优秀的程序员,十分优秀!