protected void label_8_mousePressed(MouseEvent e) {
((JLabel)e.getSource()).setBorder(new LineBorder(Color.BLACK,1));
}protected void label_8_mouseReleased(MouseEvent e) {
((JLabel)e.getSource()).setBorder(null);
}
当鼠标按下就显示边框,鼠标松开就去掉边框,来模拟按钮的点击效果但是我如何在鼠标按下去之后显示一个 JFileChooser 。 那么鼠标松开的时候就不会触发label_8_mouseReleased 这个事件。我手动调用label_8_mouseReleased事件的话,却达不到模拟的点击效果。怎么解决呢。
public void mousePressed(MouseEvent e) {
label_8_mousePressed(e);
}
public void mouseReleased(MouseEvent e) {
label_8_mouseReleased(e);
}
}
protected void label_8_mousePressed(MouseEvent e) {
JLabel temp = (JLabel)e.getSource();
temp.setBorder(new LineBorder(Color.BLACK,1));
if(temp.getName().equals("file")){
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int result = fileChooser.showSaveDialog(this);
if(result == JFileChooser.CANCEL_OPTION){
return ;
}
File fileName = fileChooser.getSelectedFile();
path.setText(fileName.toString());
}
}
protected void label_8_mouseReleased(MouseEvent e) {
((JLabel)e.getSource()).setBorder(null);
}
这是比较完整的代码。。
label_8_mouseReleased(e);
}
改成public void mouseReleased(MouseEvent e) {
}
就可以了啊
Button 有什么不能满足你的需求一定要用 Label 代替的呢?
如果想透明 setContentAreaFilled(false); 就行如果边框有什么特别要求,那就自己写个边框类
public class ButtonBorder extends AbstractBorder {
@Override
public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
AbstractButton button = (AbstractButton)c;
ButtonModel model = button.getModel();
if (!c.isEnabled()) {
g.setColor(Color.gray);
g.drawRect(x, y, width - 1, height - 1);
} else if (model.isPressed()) {
g.setColor(Color.black);
g.drawRect(x, y, width - 1, height - 1);
} else {
}
} @Override
public Insets getBorderInsets(Component c) {
return new Insets(1, 1, 1, 1);
} @Override
public Insets getBorderInsets(Component c, Insets insets) {
insets.top = 1;
insets.left = 1;
insets.bottom = 1;
insets.right = 1;
return insets;
} }