我用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
没有,我没有添加一个,因为一切正常显示。 –