我用JPanels和鼠標監聽器做了一個小小的顏色選擇器,但由於某種原因,結果不如預期那樣響應,我不知道爲什麼。缺乏響應能力的Java鼠標監聽器
爲了做到這一點我創建了一個修改的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
}
}
}
這也與我做意味着實例化我需要的所有小組及其countainer,以及更改所選colorpanels邊框顏色和存儲其我coulour方法的另一個對象nto全局變量。
雖然它有效,但每隔幾次我都要點擊幾次來選擇一個顏色面板。該程序之前沒有響應性問題,選擇器是唯一表現這種方式的事情。
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()));
}
這是一種方法,創建時所有面板都添加到矢量中,所以我可以輕鬆操縱它們。
考慮提供一個[可運行的示例](https://stackoverflow.com/help/mcve),它演示了您的問題。這不是代碼轉儲,而是您正在做的事情的一個例子,它突出了您遇到的問題。這會導致更少的混淆和更好的響應 – MadProgrammer
'repaint()'在哪裏? – RealSkeptic
沒有,我沒有添加一個,因爲一切正常顯示。 –