我使用Realm从DB加载POI。接下来,通过mapsforge将这些点添加到集群实现中。此代码运行良好:
RealmResults<GasolineRealm> gasolineRealms = presenter.getRealm().where(GasolineRealm.class)
.findAll();
for(int i=0; i<gasolineRealms.size(); i++){
geoItems.add(new GasolineGeoItem(gasolineRealms.get(i).getId(),
gasolineRealms.get(i).getLocalizationRealms().get(0).getTitle(),
gasolineRealms.get(i).getCoordinateLatitude(),
gasolineRealms.get(i).getCoordinateLongitude()));
clusterer.addItem(geoItems.get(i));
}
它在地图上绘制所有POI,但若我在领域集群中使用RxJava,就永远不会在地图上添加POI。代码如下:
Realm.getDefaultInstance().where(GasolineRealm.class)
.findAllAsync()
.asObservable()
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<RealmResults<GasolineRealm>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(RealmResults<GasolineRealm> gasolineRealms) {
for(int i=0; i<gasolineRealms.size(); i++){
geoItems.add(new GasolineGeoItem(gasolineRealms.get(i).getId(),
gasolineRealms.get(i).getLocalizationRealms().get(0).getTitle(),
gasolineRealms.get(i).getCoordinateLatitude(),
gasolineRealms.get(i).getCoordinateLongitude()));
clusterer.addItem(geoItems.get(i));
}
}
});
如果你这么做,两者几乎相等
Subscription subscription = presenter.getRealm().where(GasolineRealm.class)
.findAllAsync()
.asObservable()
.filter(RealmResults::isLoaded)
.first()
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<RealmResults<GasolineRealm>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(RealmResults<GasolineRealm> gasolineRealms) {
for(int i=0; i<gasolineRealms.size(); i++){
GasolineRealm gasolineRealm = gasolineRealms.get(i);
geoItems.add(new GasolineGeoItem(gasolineRealm.getId(),
gasolineRealm.getLocalizationRealms().get(0).getTitle(),
gasolineRealm.getCoordinateLatitude(),
gasolineRealm.getCoordinateLongitude()));
clusterer.addItem(geoItems.get(i));
}
}
});
我想重新绘制我的屏幕。到目前为止,它所做的只是在第一个屏幕上的头部应该在的地方显示一个点。这很好,但是我在代码中写了我想每秒将头部向下移动10个像素。我正在打印头部应该在的位置,在命令提示符中它显示y值确实在增加。但是在我的屏幕上,头部没有移动。 我尝试过使用revalidate方法,尝试扩展canvas类而不是jframe,我尝试过只为paint方法使用不同的类,我尝试过用paintCompon
如果答案是肯定的,该怎么做?最初,我使用repaint()调用paintComponent(图形);但是,最近我意识到repaint()实际上是repaint(0,0,width,height),它每次都重新绘制所有内容。如果我使用带有参数的repaint()来指定脏区域,它将以何种方式将这样的数据传递给paintComponent(图形)?
问题内容: 我在程序开始时,根据数据库中的某些内容,以编程方式在JScrollPane中添加了许多组件(JPanels,JLabels等)。 似乎对于GUI(?)而言,此过程太快了,因此JScrollPane并不总是正确更新,即,即使内部JPanel大于可见区域,滚动条也不可见。 调整窗口大小(JFrame)可以解决此问题,因为我认为Java在调整组件大小时会重新打印它们。 作为测试,我添加了一个
编辑:当我拖动边框时,某种刷新被发送,我需要弄清楚并手动发送相同的刷新。 请注意,我已经尝试使用revalidate()和repaint()。 当使用JFrame和JPanel来显示一个框架时,我试图使框架的大小易于改变。 null 此外,一个重要的注意事项是,当您拖动边框时,白条会消失,并正确地重新加载/刷新内容(即使您只是少量拖动)
我有一个正在添加JLabel的JPanel。然后我想删除所有的JLabel并添加一些新的。 所以我做了以下几点: 这很好。当我在这之后开始一个新线程时,我的问题就出现了,比如: 然后原始JLabels的输出仍然可见。我读到重新验证过程是一个长时间运行的任务,因此firstProducer线程正在启动,而重新验证正在进行并产生冲突。处理这个问题的最佳方法是什么?
我试图绘制一个矩形,它的位置每秒钟更新一次,因为我有一个类,它扩展了JPanel,在它里面我重写了油漆(或油漆组件)function_我已经尝试了这两个_但显然这个函数只被调用一次,正如下面的代码所示,当我试图用reaint函数在无限循环中调用它时,它没有被调用,我能做什么? 上面的代码是图形部分,下面是主函数,它位于另一个类中: 在上面的代码中,食物。加法器是矩形位置更新的地方,我已经检查过了,