Java 动态重新调整绘图区域的大小

Java 动态重新调整绘图区域的大小,java,swing,plot,awt,Java,Swing,Plot,Awt,我编写了一个程序,将GPS的坐标作为分散点打印到屏幕上。 代码如下: class POSCanvas extends JPanel{ int cnt = 1; private static final long serialVersionUID = 1L; List<Vector2D> pnts = new ArrayList<Vector2D>(); public void getNewPoint (double xnew, doubl

我编写了一个程序,将GPS的坐标作为分散点打印到屏幕上。 代码如下:

class POSCanvas extends JPanel{
    int cnt = 1;
    private static final long serialVersionUID = 1L;
    List<Vector2D> pnts = new ArrayList<Vector2D>();

    public void getNewPoint (double xnew, double ynew){
        Vector2D pnt = new Vector2D(cnt*xnew, cnt*ynew);
        pnts.add(pnt);
        cnt++;
    }

    public void paintComponent(Graphics g){
        Graphics2D g2 = (Graphics2D) g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        if (!pnts.isEmpty()){
            super.paintComponent(g);
            g2.setColor(Color.white);
            Dimension size = getSize();
            Insets insets = getInsets();
            int w =  size.width - insets.left - insets.right;
            int h =  size.height - insets.top - insets.bottom;
            for (int i = 0; i < pnts.size(); i++ ){
                Ellipse2D.Double OV = new Ellipse2D.Double(pnts.get(i).getX() % w, size.height - pnts.get(i).getY() % h, 5, 5);
                g2.draw(OV);
                repaint();
            }
        }
    }

}
类POSCanvas扩展了JPanel{
int-cnt=1;
私有静态最终长serialVersionUID=1L;
List pnts=new ArrayList();
public void getNewPoint(双X新,双Y新){
Vector2D pnt=新的Vector2D(cnt*xnew,cnt*ynew);
pnts.add(pnt);
cnt++;
}
公共组件(图形g){
图形2d g2=(图形2d)g;
g2.setRenderingHint(renderingHits.KEY\u ANTIALIASING,renderingHits.VALUE\u ANTIALIAS\u ON);
如果(!pnts.isEmpty()){
超级组件(g);
g2.设置颜色(颜色为白色);
维度大小=getSize();
Insets Insets=getInsets();
int w=size.width-insets.left-insets.right;
int h=尺寸.高度-插图.顶部-插图.底部;
对于(int i=0;i
图形的问题是,当坐标大于图形的面板大小时,打印将再次从左侧开始。以下是一个例子:


我想动态地重新调整面板的大小,使坐标始终保持在其边界上。我该怎么做?

假设您可以计算所需的空间量,您可以覆盖
JPanel
getPreferredSize
方法并返回所需的空间量。或者,你可以计算比例因子(在你想要的和你拥有的之间)并根据我认为比例部分是我所寻找的,因为数字可能会变得相当大,我不能永远重新调整窗口的大小。有没有关于如何进行缩放的想法?@MadProgrammer“在渲染时按比例缩放点”仿射变换将是我的选择。@AndrewThompson这将取决于您想要得到的效果,如果您希望“点”的大小相同,只需更近,然后缩放坐标就是方法go@DanyLavrov你可能想在和中做一些研究。缩放可以通过多种方式完成,您可以使用
仿射变换来缩放
图形
上下文,或者如果您希望将“点”保持在相同大小,只需缩放坐标即可