如何在重新调整大小期间使图形对象保持静态?

时间:2011-03-11 09:14:12

标签: java swing layout awt

下面我附上了代码,它在窗口的中心绘制了一条简单的垂直线,但是当我调整窗口大小时,线条朝着调整大小的方向倾斜。

但是当尝试使用两条线时,第一条线倾斜而第二条线保持固定。

我希望它们能够被修复,而不管给定的大小。

public class finalPlot{

    static JFrame f = new JFrame();

    public static void main(final String[] args){
        f.setTitle("Plot");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // f.setSize(500,500);
        f.setResizable(true);
        f.setVisible(true);
        f.addWindowListener(new WindowAdapter(){

            @Override
            public void windowClosing(final WindowEvent e){
                System.exit(0);
            }
        });
        f.add(new PlotArray(), BorderLayout.CENTER);
        f.pack();
        f.show();
    }
}




class PlotArray extends Canvas{

    public Dimension getPreferredSize(){
        return new Dimension(500, 500);
    }

    public void paint(final Graphics g){

        final Graphics2D g2 = (Graphics2D) g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
            RenderingHints.VALUE_ANTIALIAS_ON);

        final Dimension size = getSize();
        final Line2D lin =
            new Line2D.Float((float) size.width / 2, 90, 250, 250);
        final Line2D lin2 = new Line2D.Float(45, 300, 250, 150);
        g2.setPaint(Color.blue);
        g2.draw(lin);
        g2.draw(lin2);

    }

}

谢谢

2 个答案:

答案 0 :(得分:1)

然后不要使用size.width / 2因为它的Canvas组件的宽度。改为使用静态数字。

答案 1 :(得分:0)

每次调整窗口大小时都会调用

PlotArray.paint,每次发生这种情况时,lin都会使用不同的x值绘制,因为PlotArray的宽度不同。为了保持不变,可以在第一次调用paint时将其宽度存储在实例变量中。