2011-07-08 12 views
1

JPanelに奇妙な問題があります。私はSVGイメージを表示しようとしています(SVG_classはJSGGanvasをバティックjarから拡張しています)。問題は、私はこのプログラムを起動したとき、私はこのJPanelの問題 - 通常の外観でサイズ変更して再描画する

enter image description here

を取得し、私はポインタフレームと少しのサイズを変更するとき、私はこの

​​

import java.awt.*; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 
import java.awt.geom.Ellipse2D; 
import java.io.*; 
import java.util.LinkedList; 
import java.util.List; 
import javax.swing.*; 
import org.apache.batik.swing.JSVGCanvas; 

public class Main { 

static JScrollPane scrollpane; 
// The frame. 
protected JFrame frame; 

public static void main(String[] args) { 

final JFrame f = new JFrame("frame"); 
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
f.setSize(700, 500); 
f.setBackground(Color.blue); 

SVG_class svg = new SVG_class(); 
JPanel p = new JPanel(); 
p.setSize(new Dimension(700, 500)); 
p.add(svg); 
p.setBackground(Color.red); 
scrollpane = new JScrollPane(p); 
scrollpane.setPreferredSize(new Dimension(700, 500)); 

Container cont = f.getContentPane(); 
cont.add(scrollpane); 

f.setVisible(true); 
} 

} 

public class SVG_class extends JSVGCanvas { 
private List<Type> list; 
private int rad; 
public boolean red_dot(int iX, int iY, String sX, String sY){ 
boolean b; 
int x,y; 
x=Math.abs(iX-(int)Double.parseDouble(sX)); 
y=Math.abs(iY-(getSize().height-(int)Double.parseDouble(sY))); 
System.out.println("iX="+iX+" iY="+iY+" sX="+sX+" sY="+sY+" x="+x+" y="+y); 
b=(x<=rad) &&(y<=rad); 
return b; 
} 

    public SVG_class(){ 
    try { 
    this.list=CSV.getCSV("map2"); 
    } catch (IOException e1) { 
    // TODO Auto-generated catch block 
    e1.printStackTrace(); 
    } 
    String fileName = "map2"; 
    File file = new File("C:\\Users\\Gigabyte\\Desktop\\SVG\\"+fileName+".svg"); 
    try { 
    this.setURI(file.toURL().toString()); 
       this.addMouseListener(new MouseListener() { 
    @Override 
    public void mouseReleased(MouseEvent e) { 
    // 
    } 
    @Override 
    public void mousePressed(MouseEvent e) { 
    // TODO Auto-generated method stub 
    } 
    @Override 
    public void mouseExited(MouseEvent e) { 
    // TODO Auto-generated method stub 
    } 
    @Override 
    public void mouseEntered(MouseEvent e) { 
    // TODO Auto-generated method stub 
    } 
    @Override 
    public void mouseClicked(MouseEvent e) { 
    boolean found=false; 
    // System.out.println("pritisnuo si x="+e.getX()+" y="+e.getY()); 
    int x,y; 
    for(int i=0; i<list.size() && !found;i++){ 
    found=red_dot(e.getX(), e.getY(), list.get(i).getX(), list.get(i).getY()); 
    } 
    if (found) { 
    System.out.println("pritisao!!!!"); 
    } 
    System.out.println(" "); 
    } 
    }); 
    } catch (MalformedURLException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 
    } 

のように、通常の画像を取得している誰かが教えてもらえます間違いは何ですか?私はp.repaintで試しましたが、助けにはなりませんでした。

+1

すぐに役立つように、[SSCCE](http://pscode.org/sscce.html)を投稿してください。カラーパネルを使用してSVGレンダリングコンポーネントを置き換えることで結果を再現できるかどうかを確認してください。 –

答えて

1

表示する直前にf.setSize(700, 500);に電話する必要があります。

+0

うまく動作しませんでした。ただ試みました – Damir

1

SVG_classはおそらくコンストラクタでサイズを設定しています。それをしないで、コンストラクタを呼び出した後にサイズを定義してください。

EDIT:それは簡単な問題が何であるかを見るためになるかもしれないSVG_classのソースを投稿

f.pack(); 
+0

試しましたが動作しません – Damir

3

追加してみてください。

これはそのままですが、使用するレイアウトの種類を明示していないためです。

svgがウィンドウ全体を占めるようにしたい場合は、を作成した後にp.setLayout(new GridLayout(1, 1));を実行することができます。

+0

コンストラクタにサイズがありません – Damir

+0

あなたはどちらのコンストラクタを参照していますか?あなたが実際にそれが役立つかどうかを確認するレイアウトマネージャを指定しようとしましたか? –

関連する問題