Для тех, кто пока не нашел решения. У меня такая же проблема. Я попытался переработать растровое изображение в onPause следующим образом:
final Drawable drawable = mImageView.getDrawable();
if (drawable instanceof BitmapDrawable) {
BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
Bitmap bitmap = bitmapDrawable.getBitmap();
bitmap.recycle();
}
if (preView != null && !preView.isRecycled()) {
preView.recycle();
preView = null;
}
После возвращения я получил исключение: «Canvas: пытается использовать переработанное растровое изображение»
Решение для меня: Мне пришлось добавить следующие
mImageView.setImageBitmap(null);
Регулярное выражение для любого символа в нижнем регистре будет меньше кода, если ваше определение лучше меньше строк.
private String _regex = "[a-z]";
private Pattern _lowercaseCharacterPattern = Pattern.compile(_regex);
@Override
public void keyPressed(KeyEvent e) {
char c = e.getKeyChar();
if( _lowercaseCharacterPattern.matcher(String.valueOf(c) ).matches() )
JOptionPane.showMessageDialog(panel, "Error: "+c, " cannot be used", JOptionPane.WARNING_MESSAGE);
}
Проще говоря, вы можете использовать .contains()
для String
«правильных» символов.
Что-то вроде:
private final String letters = "abcdefghijklmnopqrstuvwxyz";
@Override
public void keyPressed(KeyEvent e) {
char c = e.getKeyChar();
// if the character entered is not the list of valid inputs, warn user
if( !letters.contains(Character.toString(c)) ){
JOptionPane.showMessageDialog(panel, "Error: "+c, " cannot be used", JOptionPane.WARNING_MESSAGE);
}
}