JPanels とマウス リスナーを使用して小さなカラー セレクターを作成しましたが、何らかの理由で結果が期待どおりに反応せず、その理由がわかりません。
そのために、ColorPanel と呼ばれる変更された JPanel を作成し、色と色の名前、組み込みのマウス リスナー、インスタンス化時に定義された背景色などのいくつかのプロパティを追加しました。
public class ColorPanel extends JPanel{
private Color color;
private String sColor;
public ColorPanel(Color color, String sColor){
this.color = color;
this.sColor = sColor;
this.setBackground(color);
this.setBorder(BorderFactory.createLineBorder(Color.white));
this.addMouseListener(new appMouseListener());
ColorSelector.panSelector.add(this);
ColorSelector.vPanel.add(this);
}
public Color getColor(){
return this.color;
}
public String getScolor(){
return this.sColor;
}
class appMouseListener implements MouseListener {
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
ColorSelector.select((ColorPanel)e.getSource());
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
}
}
これは、必要なすべてのパネルとそのカウンターをインスタンス化するために作成した別のオブジェクト、および選択したカラーパネルの境界線の色を変更し、その色をグローバル変数に保存するメソッドにリンクされています。
機能している間は、カラーパネルを選択するために何度かクリックする必要がありました。プログラムには以前は応答性の問題はなく、そのセレクターだけがこのように動作していました。
public static void select(ColorPanel colorPanel) {
IhmMap.SelectedColor = colorPanel.getColor();
IhmMap.SelectedScolor = colorPanel.getScolor();
for(int i = 0 ; i<vPanel.size(); i++ ){
vPanel.elementAt(i).setBorder(BorderFactory.createLineBorder(Color.white));
}
colorPanel.setBorder(BorderFactory.createLineBorder(Color.red.darker().darker()));
}
これが方法です。作成時にすべてのパネルがベクターに追加されるため、簡単に操作できます。