Java 如何在组件可见时使JFrame透明(已解决)
*使用谷歌翻译 你好!!我是学java swing的学生。我试着编写简单的程序。 我想要的是一个记事本程序,当你按下Ctrl+Alt时,它可以在透明和不透明之间切换。 现在按Ctrl+Alt在透明和不透明之间切换。但是,透明模式下的字体也会更改。我使用SetFont()函数强制设置字体,但它只适用于不透明模式,SetFont函数在透明模式下不起作用 如果我从toggleVisible()函数中删除setBackground(),字体也不会改变。我的猜测似乎改变了挫折的字型。谁知道如何在不使用Background的情况下使框架透明?如果你能帮我解决这个问题,我将不胜感激Java 如何在组件可见时使JFrame透明(已解决),java,swing,jframe,Java,Swing,Jframe,*使用谷歌翻译 你好!!我是学java swing的学生。我试着编写简单的程序。 我想要的是一个记事本程序,当你按下Ctrl+Alt时,它可以在透明和不透明之间切换。 现在按Ctrl+Alt在透明和不透明之间切换。但是,透明模式下的字体也会更改。我使用SetFont()函数强制设置字体,但它只适用于不透明模式,SetFont函数在透明模式下不起作用 如果我从toggleVisible()函数中删除setBackground(),字体也不会改变。我的猜测似乎改变了挫折的字型。谁知道如何在不使用Ba
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, 255, 1));
textArea.setOpaque(false);
scrollPane.getViewport().setOpaque(false);
scrollPane.setOpaque(false);
textArea.setFont(new Font("굴림", Font.PLAIN, 20));
}
else{
setBackground(new Color(255, 255, 255, 255));
textArea.setOpaque(true);
scrollPane.getViewport().setOpaque(true);
scrollPane.setOpaque(true);
textArea.setFont(new Font("굴림", Font.PLAIN, 20));
}
repaint();
visible = !visible;
}
}
+)
有运行时截图。第二张图片上的“|”是一个尽可能向右移动的光标。我不明白为什么我不能把光标移到右边。
一定是出了什么事。。。但我不知道那是什么。
这个问题问得很好,尤其是因为你不得不依赖谷歌翻译!我看不懂韩文,但看起来您在每次调用方法
setFont
时都设置了完全相同的字体。另外,您确定有굴림您的计算机上的代码>字体?字体名称通常是英文的,即使它们用于显示非英文字符。@Abra哇。。。我是个白痴。这似乎是因为我设置的字体不支持英语。非常感谢。改成英文字体后效果很好。非常感谢你。我浪费了一个小时:(+)此外,还有一种现象,即即使使用英文字体,字体也会发生微妙的变化,这似乎是因为alpha值为255。我把它降到254,问题解决了。