Как изменить прозрачность JFrame в реальном времени
Есть ли хороший способ изменить непрозрачность JFrame в реальном времени. сейчас мне нужно перезапустить окно, чтобы получить прозрачность
if (Variables.LoggerOpacity){
if (AWTUtilities.isTranslucencySupported(AWTUtilities.Translucency.TRANSLUCENT)) {
AWTUtilities.setWindowOpaque(Frame, true);
AWTUtilities.setWindowOpacity(Frame, 0.60f);
}
}
Когда я использую
AWTUtilities.setWindowOpacity(Frame, 0.60f);
На кнопке JCheckBox я не буду менять прозрачность. В: Как я могу изменить непрозрачность в реальном времени?
2 ответа
Добавьте следующую команду в конструктор фрейма. Имя фрейма в этом примере MyFrame
,
jCheckBox1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
AWTUtilities.setWindowOpacity(MyFrame.this, 0.2f);
}
});
Даже если вы установили JFrame в статическое состояние, вы сможете ссылаться на него, если ваш метод непрозрачности находится в том же классе, если нет - создайте метод getter для ссылки на ваш JFrame и передайте его своей функции. Вот пример программы, которая выполняется, и прозрачность работает нормально:
public class JFrameOpacityExample extends JFrame {
private static JFrame myFrame;
private static boolean loggerOpacity;
private static JButton button;
public static void main(String[] args) {
myFrame = new JFrame("Test Frame");
myFrame.setSize(400, 400);
myFrame.setVisible(true);
JPanel panel = new JPanel();
button = new JButton("Press me");
button.setBounds(100, 100, 50, 50);
button.setVisible(true);
panel.add(button);
myFrame.add(panel);
loggerOpacity = true;
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
Object src = evt.getSource();
if (src == button && loggerOpacity) {
AWTUtilities.setWindowOpacity(myFrame, 0.40f);
}
}
});
}
}