2014-01-09 37 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(); 

    } 
}