我有一个名为MapTile
的课程,其范围为JLabel
。我正在做的是在GridLayout中加载一个带有大量MapTile的JPanel。我注意到当我加载100x100 MapTile时,这个过程需要比100x100 JLabel中的加载时间更长。这是我下面的MapTile
课程。
public class MapTile extends JLabel {
private static final long serialVersionUID = 1L;
private boolean selected;
private Point location;
public MapTile(){
super();
location = new Point();
}
public void setLocation(int x, int y){
setLocation(new Point(x,y));
}
public void setLocation(Point p){
location = p;
}
public Point getLocation(){
return location;
}
public void setSelected(Boolean b){
selected = b;
if (selected){
((GridPanel)this.getParent()).addToSelection(this);
this.setBorder(BorderFactory.createLineBorder(Color.RED));
} else {
this.setBorder(BorderFactory.createLineBorder(Color.BLACK));
}
this.repaint();
}
public boolean isSelected(){
return selected;
}
}
没有什么花哨的,我只是覆盖了setLocation方法并添加了一些其他方法。我还添加了三个实例变量。
扩展一个类会导致一堆额外的权重吗?
我忍不住认为我的MapTile
类非常简单,但加载100x100 MapTile与加载100x100 JLabel之间的时间差别很大。与JLabel相比,大量加载MapTile需要大约4-5倍。
答案 0 :(得分:2)
您不仅要覆盖setLocation
,而且每次调用Point
方法时都会创建setLocation(int,int)
的新实例,这可能会对性能产生影响
除此之外: - 你有没有测试过,当你删除被覆盖的方法时,你不再经历减速 - 您是否已分析应用程序以查看性能损失发生的位置
哦是的,我不认为你被覆盖的版本setLocation
是正确的。我担心如果你想让super.setLocation
行为正确
JLabel