如何解决组件可见时如何让JFrame透明已解决
*使用谷歌翻译
你好!我是学习java swing的学生。我尝试编写简单的程序。 我想要的是一个记事本程序,当您按 Ctrl + Alt 时,它可以在透明和不透明之间切换。 现在按 Ctrl + Alt 在透明和不透明之间切换。但是,透明模式下的字体也会发生变化。我用SetFont()函数强制设置字体,但是只适用于不透明模式,setFont函数在透明模式下不起作用。
如果我从 toggleVisible() 函数中删除 setBackground(),字体也不会改变。我的猜测似乎改变了 setBackground 字体。谁知道如何在不使用 setBackground 的情况下使框架透明?或者,如果您能帮我解决问题,我将不胜感激。
package ffmemo;
import java.awt.Color;
import java.awt.Font;
import java.awt.GraphicsDevice;
import static java.awt.GraphicsDevice.WindowTranslucency.TRANSLUCENT;
import java.awt.GraphicsEnvironment;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.BitSet;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
public class FFMemo {
public static void main(String[] args){
new FFMemoFrame();
}
}
class FFMemoFrame extends JFrame {
BitSet keyBitSet = new BitSet(2); //0: ctrl key,1: alt key
boolean visible = true;
JTextArea textArea;
JScrollPane scrollPane;
Color color;
FFMemoFrame(){
//ParaM: window title
super("FFMemo");
setSize(500,200);
setLocation(100,100);
setUndecorated(true);
getRootPane().setwindowdecorationStyle(JRootPane.FRAME);
setVisible(true);
setDefaultCloSEOperation(EXIT_ON_CLOSE);
color = getBackground();
textArea = new JTextArea();
textArea.getDocument().addDocumentListener(new DocumentListener(){
@Override
public void changedUpdate(DocumentEvent e){
warn();
}
@Override
public void insertUpdate(DocumentEvent e) {
warn();
}
@Override
public void removeUpdate(DocumentEvent e) {
warn();
}
public void warn(){
//System.out.println(textArea.getText());
repaint();
}
});
textArea.append("hello,world!");
textArea.setLineWrap(true);
textArea.setVisible(true);
textArea.setFont(new Font("굴림",Font.PLAIN,20));
textArea.addKeyListener(new KeyAdapter(){
public void keypressed(KeyEvent e){
String s = e.getKeyText(e.getKeyCode());
if(s.equals("Ctrl")) keyBitSet.set(0,true);
else if(s.equals("Alt")) keyBitSet.set(1,true);
if(keyBitSet.get(0) && keyBitSet.get(1)){
toggleVisible();
}
}
public void keyreleased(KeyEvent e){
String s = e.getKeyText(e.getKeyCode());
if(s.equals("Ctrl")) keyBitSet.set(0,false);
else if(s.equals("Alt")) keyBitSet.set(1,false);
}
});
scrollPane = new JScrollPane(textArea);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
scrollPane.setVisible(true);
add(scrollPane);
revalidate();
}
private void toggleVisible(){
if(visible){
setBackground(new Color(255,255,1));
textArea.setopaque(false);
scrollPane.getViewport().setopaque(false);
scrollPane.setopaque(false);
textArea.setFont(new Font("굴림",20));
}
else{
setBackground(new Color(255,255));
textArea.setopaque(true);
scrollPane.getViewport().setopaque(true);
scrollPane.setopaque(true);
textArea.setFont(new Font("굴림",20));
}
repaint();
visible = !visible;
}
}
+) 有运行时截图。 “|”在第二张图片是一个光标,它尽可能向右移动。我不明白为什么我不能再向右移动光标。 一定是出了什么问题……但我不知道那是什么。 first second
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。