2014-01-09 35 views
0

直升機傢伙,Rectangle2D,邊框不見了?

我的問題是,有時如果我的矩形得到一個大的寬度或高度的下方,左邊框分裂,不再使一個連續的邊界,如果我甚至會使其較寬的邊框變爲小,就像是否存在矩形邊框可以存在多長時間的限制一樣......這真是令人困惑,至今我還沒有找到解決方案:SI在那裏放置了一張圖片的鏈接,以便您自己看到。

new Rectangle2D.Double(mojrectangle.getUpperleftPointmojRectangle().getX(), mojrectangle.getUpperleftPointmojRectangle().getY(),1000,1000) 
repaint(); 

enter image description here

感謝您的幫助..

BTW我有一個的Arc2D同樣的問題,如果它得到真正的大

UPDATE:我從功能setStroke命令刪除和現在它正確繪製它,但在將來,我將需要設置矩形中風,因此它讓我感到悲傷。

@Override 
public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    Graphics2D g2=(Graphics2D)g; 
//g2.setStroke(stroke); 
    g2.draw(rectangle); 

} 

在這裏,我把我的項目的示例代碼,請與g2.setStroke(selectedstroke)嘗試 - 它不會工作,沒有它...我希望我解釋說清楚了。

package com.awtgraphicsdemo; 

import java.awt.*; 
import java.awt.event.*; 
import java.awt.geom.*; 
import javax.swing.JComboBox; 

public class AWTgraphicsdemo extends Frame { 

    final float dash[] = {10.0f}; 
    final float solid[] = {1000.0f};    // these must be in an Array 
    float lineWidth[]={2.0f,4.0f,6.0f,8.0f,10.0f}; // width of the drawing line 
    String[] lineWidthString={"2.0","4.0","6.0","8.0","10.0"}; 
    JComboBox strokecombobox=new JComboBox(lineWidthString); 
    BasicStroke selectedStroke = new BasicStroke(lineWidth[0],BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER, 10.0f, solid, 0.0f); 

    public AWTgraphicsdemo(){ 
     super("Java AWT Examples"); 
     prepareGUI(); 
    } 

    public static void main(String[] args){ 
     AWTgraphicsdemo awtGraphicsDemo = new AWTgraphicsdemo(); 
     awtGraphicsDemo.setVisible(true); 
    } 

    private void prepareGUI(){ 
     setSize(400,400); 
     addWindowListener(new WindowAdapter() { 
     public void windowClosing(WindowEvent windowEvent){ 
      System.exit(0); 
     }   
     }); 
    }  

    @Override 
    public void paint(Graphics g) { 


     Graphics2D g2 = (Graphics2D) g; 

     g2.setStroke(selectedStroke); 
     g2.draw (new Rectangle2D.Double(10, 10, 1000, 900)); 
     Font font = new Font("Serif", Font.PLAIN, 24); 
     g2.setFont(font); 
     g.drawString("Welcome to TutorialsPoint", 50, 70); 
     g2.drawString("Rectangle2D.Rectangle", 100, 120); 
    } 
} 
+2

請考慮創建和發佈了一個[MCVE](http://stackoverflow.com/help/mcve)。 –

+1

聽起來更像是你有漆問題... – MadProgrammer

+0

我要通知@MadProgrammer你的改變。我正在旅行,目前無法提供幫助。 –

回答

1

直升機再次,

我想通了,我的問題,這是中風的特性,打完成分,它的行程得到激活這使得改爲繪製shape.By修改的一些lenght撫摸堅實的數組我能夠得到我想要的結果。

謝謝您的幫助和建議:)

照顧

0

更好:

  • 不能取代在頂級窗口paint(...)(如MadProgrammer州),因爲這也改變了繪畫邊界和兒童組件 - 這是一件危險的事情。
  • 改爲覆蓋JPanel的paintComponent(...)(同樣是MadProgrammer狀態),並將JPanel置於頂層窗口中。
  • 不要將圖形對象的描邊設置傳遞到繪畫方法中,而是將圖形對象的副本設置爲不會產生副作用。

例如,

public class MyPanel extends JPanel { 
    @Override 
    protected void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    Graphics2D g2 = (Graphics2D) g.create(); 
    g2.setStroke(....); 

    // do drawing with g2 here 

    g2.dispose(); 

    } 
}