paintComponent
(円弧を使用して別の形式でペイントするために)オーバーライドしてラベルを作成し、パネルに配置しました。すべてが正常に機能しましたが、同じ場所(によって.setlocation
)にあるラベルが問題を引き起こしています。
同じ場所に異なる形のラベルが3つあるとします。ABC Aが最初に作成され、次にBが作成され、最後にcが作成されます。Aをクリックすると、関数はAをペイントし、「Aをクリックしました」と表示します。
しかし、BまたはCをクリックすると、Aをクリックしたように動作します。
(スクロールペインにスタックされたパネルにラベルを追加しています)
これが私がラベルを作るコードです
for(int i=0;i<rowcount;i++){
arcstart = Rawazimuth(azimuth[i]);
//custom JLabel to paint it like an arc
MyLabel FLabel = new MyLabel(100, 50, (int)arcstart,cellid[i],lon[i],lat[i]);
FLabel.setOpaque(true);
Dimension LabelSize = new Dimension( 100,50);
FLabel.setSize(LabelSize);
//locate the JLabel to labels location. it might be same or not
FLabel.setLocation(lon[i], lat[i]);
MyPanel.add(FLabel);
}
これは私のカスタムjlabelクラスです
public MyLabel(int W, int H, int start,int outcellid,int lonn, int latt) {
addMouseListener(this);
arcsizeW = W;
arcsizeH = H;
arcstart = start;
cellid = outcellid;
clicked = false;
lon = lonn;
lat = latt;
}
@Override
public void paintComponent(Graphics g){
// true if button is clicked, so paint acordingly
if(clicked ==true){
g.setColor(dummyg.getColor());
}else{
g.setColor(Color.blue);
}
// draw the arc
g.fillArc(0, 0,arcsizeW , arcsizeH, arcstart, 60);
}
//if cell is clicked, change its color to red and print its cellid
@Override
public void mouseClicked(MouseEvent e) {
System.out.println(cellid);
dummyg = this.getGraphics();
dummyg.setColor(Color.red);
this.paintComponent(dummyg);
clicked = true;
}// other listener stuff}
では、どうすればこれを防ぐことができますか?私はjlayerpaneを使用できると思いますが、少なくとも4つのレイヤーが必要になります(問題がなければdunno)。