Sim*_*iil 3 java swing transparency bufferedimage jbutton
我有个问题:
我在JFrame中渲染BufferedImage.然后我将JButton添加到同一帧.当我试图使按钮透明时,按钮变得透明,但是忽略它的实际位置,它总是透明的,就像它被卡在框架的左上角一样.我测试了一些不同的方法来使按钮透明,总是具有相同的结果.
有任何想法吗?
谢谢
public class TestPanel extends JPanel {
public TestPanel(){
JButton foo = new JButton("test");
foo.setBackground(new Color(0, 0, 0, 0));
foo.setBounds(20, 100, 300, 50);
this.add(foo);
}
public void paint(Graphics g){
Graphics2D g2 = (Graphics2D) g;
g2.drawImage(ImageFactory.getImg(), 0, 0, null); //get a BufferedImage
g2.dispose();
}
Run Code Online (Sandbox Code Playgroud)
}
我看到了几个问题,即使我不确定它们中的哪一个会导致你的问题.我尝试按顺序列出它们:
TestPanel没有指定LayoutManager(我希望您在代码中的其他位置指定它).您正在扩展一个JPanel不调用super paintComponent方法(不要使用paint).您应该在paintComponent方法中的任何其他内容之前执行此操作:
public void paintComponent(Graphics g){
super.paintComponent(g);
}
Run Code Online (Sandbox Code Playgroud)删除dispose方法调用.你不能破坏你的图形对象.
编辑:
这是个问题:
foo.setBounds(20, 100, 300, 50);
Run Code Online (Sandbox Code Playgroud)
您正在尝试显式设置JButton的边界.你不应该这样做.如果您使用的是LayoutManager,则可能会忽略此指令.如果您使用的是null布局,这也可能是个问题.