Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从不调用PaintComponents()_Java_Swing_Paintcomponent - Fatal编程技术网

Java 从不调用PaintComponents()

Java 从不调用PaintComponents(),java,swing,paintcomponent,Java,Swing,Paintcomponent,这应该是一个抽象类,可以扩展为绘制连接JPanel上某些坐标点的线 但是,从未调用专门的PaintComponents()方法。我看到了其他答案,并尝试使用他们的解决方案,例如检查我是否添加了JPanel或是否有布局。但是,PaintComponent()仍然没有被调用,屏幕上也没有显示任何内容 import java.awt.*; import java.util.*; import javax.swing.*; public abstract class XYGrapher { priva

这应该是一个抽象类,可以扩展为绘制连接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);
}
}
import java.awt.*;
导入java.util.*;
导入javax.swing.*;
公共抽象类XYGrapher
{
私有数组列表坐标;
int-xStart;
内特伊斯特;
整数宽度;
内部高度;
公共类GraphPanel扩展了JPanel
{
@凌驾
公共组件(图形g)
{
超级组件(g);
g、 setColor(Color.green);
g、 抽绳(X起点,Y起点+高度/2,X起点+宽度,Y起点+高度/2);
g、 抽绳(xStart+width/2,yStart,xStart+width/2,yStart+height);
g、 设置颜色(颜色为黑色);
对于(int i=0;i

我认为“PrimtCultEngEnter()”方法应该是“PruttCutices()”。

为了更好的支持,考虑提供一个哦…谢谢很多……我的头撞到屏幕上试图弄清楚发生了什么…新手错误。