Java JPanel问题-在正常外观上调整大小时重新绘制
我对杰帕内尔有奇怪的问题。我试图展示svg图像svg_类从batik jar扩展了JSVGCanvas。问题是当我启动这个程序时,我得到了这个 当我用指针框稍微调整大小时,我会得到这样的正常图片Java JPanel问题-在正常外观上调整大小时重新绘制,java,swing,svg,batik,Java,Swing,Svg,Batik,我对杰帕内尔有奇怪的问题。我试图展示svg图像svg_类从batik jar扩展了JSVGCanvas。问题是当我启动这个程序时,我得到了这个 当我用指针框稍微调整大小时,我会得到这样的正常图片 import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.geom.Ellipse2D; import java.io.*; import java.
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,但没用。你应该打电话给f.setize700500;在显示之前。您应该调用f.SetSize700500;就在显示之前。SVG\u类可能已经在构造函数中设置了它的大小。不要这样做,在调用构造函数后在处定义大小
编辑:尝试添加
f.pack();
SVG_类可能已经在构造函数中设置了它的大小。不要这样做,在调用构造函数后在处定义大小
编辑:尝试添加
f.pack();
发布SVG_类的源代码可能更容易看出问题所在
事实上,我怀疑问题在于您没有明确告诉它使用哪种布局
如果希望svg占据整个窗口,可以执行p.setLayoutNewGridLayout1,1;创建p之后。发布SVG_类的源代码可能会更容易看出问题所在
事实上,我怀疑问题在于您没有明确告诉它使用哪种布局
如果希望svg占据整个窗口,可以执行p.setLayoutNewGridLayout1,1;创建p.后,为了更快地获得更好的帮助,请发布一个。查看是否可以通过使用彩色面板替换SVG渲染组件来重现结果。要更快地获得更好的帮助,请发布一篇文章。看看是否可以通过使用彩色面板替换SVG渲染组件来重现结果。我在构造函数中没有大小您指的是哪个构造函数?您是否尝试过指定一个布局管理器来查看它是否有用?我在构造函数中没有大小您指的是哪个构造函数?您是否尝试过实际指定布局管理器以查看它是否有帮助?