Надеюсь, что этот вопрос может больше подчеркнуть эффект затухания Jlabel (колебание).
Конечно, да ... Я уже следую некоторому руководству и некоторым ответам, полученным от Эта ветка ссылок , но у меня это немного другое. Это не просто текст внутри JLabel, это изображение, которое я нанес.
Я продолжаю следовать за потоком, расположенным вне stackoverflow . И все же, это дает мне эффект затухания. Но произошла ужасная вещь; белый фон.
Как это решить?
Я делюсь интерфейсом здесь ...
Первый снимок экрана, сделанный здесь - это более ранняя фаза, когда затухание еще не произошло. В то время как,
Второй снимок экрана, взятый здесь , является нежелательным результатом, о котором я упоминал.
Если честно, я использовал библиотеку Trident для анимации;
Таким образом, всякий раз, когда пользователь нажимает на изображение, он выполняет этот код;
Timeline tm = new Timeline(jll_btnProceed);
tm.addPropertyToInterpolate("intensity", 1.0f, 0.0f);
tm.setDuration(1000);
tm.play();
и ... сам JLabel, я использовал его для переопределения, используя этот исходный код;
/**
*
* @author Gumuruh
*/
public class JLabelFader extends JLabel {
private float intensity = 1.0f;
public void setIntensity(float intensity) {
this.intensity = intensity;
this.setOpaque(false);
repaint();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
final Composite oldComposite = g2.getComposite();
g2.setComposite(AlphaComposite.SrcOver);
final Color c = getBackground();
final Color color = new Color(c.getRed(), c.getGreen(), c.getBlue(), (int) (255 * (1.0f - intensity)));
g2.setColor(color);
g2.fillRect(0, 0, getWidth(), getHeight());
g2.setComposite(oldComposite);
}
}
Моя рука и моя голова не могут остановиться, чтобы сделать это полностью решенным. Таким образом, я попытался привести пример из электронной книги Java Filthy Rich Client и затем применить приведенный ниже исходный код, но сначала мне нужно КОММЕНТАРИЙ защищенная пустая краска (Графика g) метод, написанный выше, и просто добавив этот исходный код;
private BufferedImage buttonImage = null;
public void paint(Graphics g) {
// Create an image for the button graphics if necessary
if (buttonImage == null || buttonImage.getWidth() != getWidth()
|| buttonImage.getHeight() != getHeight()) {
buttonImage = getGraphicsConfiguration().
createCompatibleImage(getWidth(), getHeight());
}
Graphics gButton = buttonImage.getGraphics();
gButton.setClip(g.getClip());
// Have the superclass render the button for us
super.paint(gButton);
// Make the graphics object sent to this paint() method translucent
Graphics2D g2d = (Graphics2D) g;
AlphaComposite newComposite =
AlphaComposite.getInstance(AlphaComposite.SRC_OVER, intensity);
g2d.setComposite(newComposite);
// Copy the button's image to the destination graphics, translucently
g2d.drawImage(buttonImage, 0, 0, null);
}
в котором в конце ... дает мне хороший эффект затухания. Но сначала это дало мне 2-й ужасный эффект , который ЧЕРНЫЙ ФОН отображается первым. Не могу поверить мне ?? Хорошо, вот Первый снимок экрана ПОСЛЕ применения кода из электронной книги . и вот хороший эффект эффекта затухания .
Если кто-то говорит мне;
« ВАШ PNG НЕ ПРОЗРАЧНЫЙ !».
Пожалуйста, не говори так. Потому что я следил за созданием PNG внутри Photoshop, используя этот Tut .
Теперь, моя голова кружилась, но мое сердце смеялось и не может с этим справиться. О, МОЙ БОГ. Geeezzz ....!
И новые истории начались ...
* ОБНОВЛЕНО ЗДЕСЬ И НИЖЕ *
Эмм, большое спасибо нашему другу по имени ... М.Корбель,
с его тема указана по этой ссылке . Предоставляя ясный пример эффекта затухания, Swing JButton и я попытались внедрить его в мою JLabel, и violaaa ... !!
Оно работает.
Давайте дадим большой хлопок для MKorbel . : D
Так или иначе, как я могу исправить предыдущий код? Довольно просто, просто COMMENT метод Paint () и снова используйте метод paintComponent () , и он должен быть переопределен с новым исходным кодом ниже;
@Override
public void paintComponent(java.awt.Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, intensity));
if (rectangularLAF && isBackgroundSet()) {
Color c = getBackground();
g2.setColor(c);
g.fillRect(0, 0, getWidth(), getHeight());
}
super.paintComponent(g2);
g2.dispose();
}
Теперь JLabel можно легко менять с помощью переменной интенсивности .
Затухание и затухание завершено.
Хорошо. Теперь все кажется " OKAY ". Но подождите немного, здесь опять что-то странно произошло. Вы это заметили? Хммм ....
Я пытался передать Mouse Mouse (Hover On) в JLabel , который мы переопределяем для paintComponent () метода, который обсуждался ранее. С этой строкой кода;
myJLabel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
По логике, он должен менять курсор при наведении курсора. Но вот еще один странный эффект . (Очень жаль, но это все еще продолжение основного дела). Странный эффект теперь заключается в том, что курсор мыши нельзя изменить , когда мы наводим курсор на Jlabel. Это все еще не может изменить Курсор. Кажется, что метод paintComponent () влияет на реакцию Курсора. Это правда?