开发者

JPanel problem - repaint on resize on normal look

I have strange problem with JPanel. I am trying to show svg image ( SVG_class extends JSVGCanvas from batik jar). Problem is when I start this program I get this

JPanel problem - repaint on resize on normal look

and when I resize with pointer frame a little I get normal picture like this

JPanel problem - repaint on resize on normal look

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();
    }
    }

Can someone tell me what is mistake ? I tried with p.repaint but it didn't help.


Posting the source for SVG_class might make it easier to see what the problem is.

As it is, I suspect the problem is because you're not explicitly telling it what kind of layout to use.

If you want svg to take up the whole window you could do p.setLayout(new GridLayout(1, 1)); after you create p.


You should call the f.setSize(700, 500); just before showing.


SVG_class has probably set its size in the constructor. Don't do that and define the size at after calling the constructor.

EDIT: Try adding

f.pack();
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜