1

私は古いコードの束に戻っていますが、私の Java は非常にラフです。親切にしてください。

問題: キャンバスに描画するアプリケーションがあります。画面オブジェクトの配置はうまく機能します。他のオブジェクトに添付されたテキストも。ただし、キャンバスに Text オブジェクトを配置すると、キャンバスのスケールが半分になります。私は何ヶ月もいじくり回してきましたが、解決策が見つからないようです. どんなアドバイスも役に立ちます。

以下は、他の描画メソッドを使用してクラス Visualise2D にある画面にテキストを描画するコードです。他のすべてのオブジェクトは同じスケールなどを使用します。これは、Java 15 にアップグレードした後にのみ発生しました。最後に使用した Java は Java 8 で、正常に動作しました。

    //TEXT  
    public void paintText(Graphics2D t2D, Color color,Text t, Font font, double bearing, Rectangle2D bounds, double scale, boolean selected, boolean isRotationTool, double enhance) {

        //Draws text where ever the user clicks
        FontMetrics fm = t2D.getFontMetrics();

        t2D.setFont(default_FONT);
        
        AffineTransform at = new AffineTransform();

        int x = (int) ((t.getX() - bounds.getX())*(scale));
        int y = (int) ((bounds.getHeight() + bounds.getY() - t.getY()) *(scale));

        at.setToRotation(Math.toRadians(bearing+270), x,y);
        FontRenderContext frc = t2D.getFontRenderContext();
        TextLayout layout = new TextLayout(t.getText(), t2D.getFont(), frc);
        
        t2D.setTransform(at);
        
        if (!(selected)) {
            t2D.setColor(color);
        }
        else 
        {
            //pixel size of the circle
            float size = 20;//(float) (fm.stringWidth(t.getText())*0.5);
            t2D.setColor(p_selectedObjectsColour);
            t2D.setStroke(LINE_100);
            
            //Highlight and origin indicator when selected - START
            t2D.setColor(p_selectedObjectsColour);
            t2D.draw(new Ellipse2D.Double((((t.getX() - bounds.getX())*scale) - size), (((bounds.getHeight() + bounds.getY() - t.getY())*scale) - size), (size*2), (size*2))); 
            
            if(isRotationTool){
                t2D.drawString("  : \uu27f3 "+dec1P.format(bearing)+"\u00b0",(float) (x + (fm.stringWidth(t.getText())*1.05)),y);
            }
            
            t2D.setColor(p_selectedObjectsColour);
            
            t2D.draw(new Rectangle2D.Double(
                    (t.getX() - bounds.getX())* scale,
                    ((bounds.getHeight() + bounds.getY() - t.getY())*scale)-fm.getStringBounds(t.toString(), t2D).getHeight(),
                    t.getBounds().getWidth(),
                    t.getBounds().getHeight()
                    ));
            t2D.drawLine((int) (((t.getX() - bounds.getX())) * scale),
                    (int)(((bounds.getHeight() + bounds.getY())-(t.getY()))*scale), 
                    (int)(((t.getX())- bounds.getX())*scale)+fm.stringWidth(t.getText()),
                    (int)(((bounds.getHeight() + bounds.getY())-(t.getY()))*scale));
        }
        t2D.setColor(color);
        //t2D.drawString(t.getText(), x, y);
        layout.draw(t2D, x, y);

        at.setToRotation(0, x, y);

        t2D.setTransform(at);
        //This error is to remind you that the Affine transform is not working and the text is in the collection still after it is moved. 

    }

以下は、この問題を説明する 2 つの画像です。
画像 1 はノーマル スケールのノーマル ビューです。画像 2 はテキスト追加スケール後の変更です。

テキストが削除されると、スケールは最初の画像に戻ります。

通常のスケール:

https://i.stack.imgur.com/FjfPe.jpg

追加されたテキスト スケールの変更:

https://i.stack.imgur.com/Dh1RK.jpg

4

0 に答える 0