2012-04-16 4 views
1

아래 코드와 같이 데이터베이스의 x와 y 값을 가져옵니다. 그리고 배열 x에 저장하십시오. 그 후 프레임에이 선을 그리려고하지만 그려지지 않습니다. 어떻게 프레임에 선을 그릴 수 있습니까?왜 선을 그릴 수 없나요? JFrame에

public class TestFrame{ 
    static JFrame test; 
    public static void main(String ar[]){ 
     test=new JFrame("Test"); 
     JButton openLine=new JButton(new AbstractAction("Open Line"){ 

      public void actionPerformed(ActionEvent e) { 
       String lineId=JOptionPane.showInputDialog("Enter Line id"); 
       ImageComponent image=new ImageComponent(); 
       image.openLine(lineId); 
      } 

     }); 
     test.add(openLine, BorderLayout.NORTH); 
     test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     test.setSize(600,600); 
     test.setVisible(true); 

    } 
    static class ImageComponent extends JComponent{ 
     static int[] x=new int[100]; 
     static ArrayList al=new ArrayList(); 
     public void openLine(String line_id){ 

          try { 

           Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
           Connection con=DriverManager.getConnection("jdbc:odbc:image"); 
           Statement pstm=con.createStatement(); 
           ResultSet rs=pstm.executeQuery("select * from Line where ID= '"+line_id+"'"); 
           while(rs.next()){ 
            x[0]=rs.getInt(3); 
            x[1]=rs.getInt(4); 
            x[2]=rs.getInt(5); 
            x[3]=rs.getInt(6); 

            al.add(x); 

           } 

           repaint(); 

          } catch (Exception ex) { 
           System.out.println("Exception : "+ex); 
          } 
       } 
       public Graphics2D gd; 
       Line2D[] line=new Line2D[100]; 
     protected void paintComponent(Graphics g) { 
      super.paintComponent(g); 
         gd=(Graphics2D)g; 

         gd.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 

          for(int i=0;i<al.size();i++){ 
           line[i]=new Line2D.Double(x[0], x[1],x[2],x[3]); 
           gd.draw(line[i]); 

          } 

         } 
       } 
} 

답변

4

여기 BufferedImage as a rendering surface 사용하는 하나의 방법이다.

그 질문의 영업 이익은 애플릿에 대해 질문했다,하지만 난 옵션 창에서 이미지를 표시. paint(Graphics) 또는 paintComponent(Graphics)을 무시할지 여부를 혼동하지 않고 프레임 등에서 표시하는 데 적합합니다. ;)

+0

미안하지만, 당신의 요점을 얻지 못했습니다 ... – Parth

+0

음 ... 대체 할 수있는 ' 프레임 '을'이미지에 선을 그립니다 (그리고 원하는 경우 프레임에 넣으십시오) '하고 작동하는 (애니메이션으로 된) 예제가 있습니다. 코드를 실행 해 보셨습니까? –

1

당신은 Graphics 개체를 사용할 수 있도록처럼 paint() 메소드를 오버라이드 (override) :

public void paint(Graphics g) { 
    Graphics2D g2 = (Graphics2D) g; 
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
     RenderingHints.VALUE_ANTIALIAS_ON); 

    g2.setPaint(Color.gray); 
    int x = 5; 
    int y = 7; 

    g2.draw(new Line2D.Double(x, y, 200, 200)); 
    g2.drawString("Line2D", x, 250); 

    } 

here

+0

여기에 나와 있지 않은 다른 방법이 있으므로'paintComponent() '를 사용하여 선을 그려야합니다. 그런데 어떻게 할 수 있습니까? – Parth

1

에서 촬영하면되지 직접 JFrame의에해야한다. JFrame의 본문에있는 모든 렌더링은 내용 창에서 수행됩니다. 메뉴 내용은 JMenuBar에서 수행됩니다.

+0

선을 그릴 수있는 다른 방법이 있습니까? – Parth

+0

* "직접 JFrame에 있어서는 안됩니다."* 코드는'ImageComponent extends JComponent {'- OP가 프레임에 직접 드로잉하지 않습니다. –

1

버튼 하나를 클릭 할 때마다 새 ImageComponent를 만들지 만 프레임에 추가하지 않는 것이 하나의 문제입니다. 또 하나는 arraylist (al)을 채우지 만 실제 선을 그리는 데는 사용하지 않는 것입니다.

이 X에 대한 거짓 값을 나를 위해 작동

[0] X [1], X [2], X [3] :

static JFrame test; 
static ImageComponent image = new ImageComponent(); //declared as a class member 

public static void main(String ar[]) { 
    test = new JFrame("Test"); 
    JButton openLine = new JButton(new AbstractAction("Open Line") { 

     public void actionPerformed(ActionEvent e) { 
      String lineId = JOptionPane.showInputDialog("Enter Line id"); 
      image.openLine(lineId); 
     } 
    }); 
    test.add(openLine, BorderLayout.NORTH); 
    test.add(image); //ADD THE IMAGE TO THE FRAME 
    image.setVisible(true); 
    test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    test.setSize(600, 600); 
    test.setVisible(true); 

} 
+0

당신을 위해 일한 전체 코드를 보여 주시겠습니까, 나는 똑같이 시도하고 있지만 저에게는 효과가 없습니다 .. – Parth

관련 문제