【问题标题】:How to make JFrame same shape as Image with transparent Background?如何使 JFrame 与具有透明背景的图像形状相同?
【发布时间】:2016-03-21 11:35:04
【问题描述】:

我是使用 NetBeans 作为我的 IDE 的 Java 初学者...

我正在尝试制作一个自定义形状的 JFrame,它的形状类似于我将要创建的图像...我找到了一个解决方案 herehere 但我不知道如何将它应用到网豆..

花了我几个小时的研究,但无济于事..所以我在这里问它希望有人能启发我...我也希望你解释使用的代码及其工作原理,这样我也可以学习并复制粘贴...

【问题讨论】:

  • 为了我的钱,我不会在意窗口的形状,我只会让它对exampleexampleexampleexample透明
  • 主要原因是,你失去了对抗锯齿的控制,图像看起来很恶心和不愉快:P
  • @MadProgrammer 我让你的代码在 NetBeans 上运行,但我的问题是当我添加一个组件时,它没有显示出来......你能建议另一个解决方案吗?我只想要主要的JFrame 透明,添加一个JPanel 并将每个组件放在那里......最好,我也想要JPanel 透明,这样我就可以使用带有图标(图像)的JLabel 设计窗口。 .
  • 嗯,一般来说,我提供了 4 个可运行的示例,其中大多数都向框架中添加了至少一个组件
  • @MadProgrammer 在我问这个问题之前我已经阅读了所有的例子.. 其中大部分都是纯粹用代码编写的,这很好,但正如我在我的问题中所说,我喜欢使用IDE,以便更轻松地添加组件..无论如何...我在等待答案并阅读与此相关的一些其他主题时使用 NetBeans...我碰巧做了一个更简单的方法,但我不确定它是否好够了还是什么..

标签: java swing netbeans-8


【解决方案1】:

我也希望你解释一下使用的代码以及它是如何工作的

这就是教程的好处。阅读 How to Create Translucent and Shaped Windows 上的 Swing 教程中的部分以获取信息和工作示例。

我不知道如何在 Netbeans 中应用它

不要使用 IDE 生成代码。如果您曾经切换过 IDE,那么您需要学习一个新的。而是花时间学习 Java/Swing,而不是 IDE。

【讨论】:

  • 我已经读完了How to Create Translucent and Shaped Windows....我喜欢使用IDE来轻松设计表单...代码方面,我倾向于查看和阅读生成的代码以便了解它们的功能以及它们是如何工作的......无论如何感谢您的提示......
【解决方案2】:

在阅读并观看了我找到的几个教程之后,在玩 NetBeans 几个小时后,我终于找到了一个简单的解决方案......

代码如下:

package testPack;

import java.awt.Color;
import javax.swing.*;
import java.awt.Dimension;

/**
 *
 * @author Karyuu Ouji
 */
public class TestPanel extends javax.swing.JPanel {

    /**
     * Creates new form TestPanel
     */
    public TestPanel() {

        initComponents();
        this.setPreferredSize(new Dimension(704,182));
        this.setOpaque(false);
        this.setDoubleBuffered(true);

    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jButton1 = new javax.swing.JButton();
        jLabel1 = new javax.swing.JLabel();

        setLayout(null);

        jButton1.setText("Close");
        jButton1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                jButton1MouseReleased(evt);
            }
        });
        add(jButton1);
        jButton1.setBounds(593, 0, 110, 23);

        jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/testPack/sao.png"))); // NOI18N
        jLabel1.setText("jLabel1");
        add(jLabel1);
        jLabel1.setBounds(0, 0, 704, 180);
    }// </editor-fold>                        

    private void jButton1MouseReleased(java.awt.event.MouseEvent evt) {                                       
        System.exit(0);
    }                                      

    public static void main(String[] args) {

        JFrame frmMain = new JFrame();
        frmMain.setUndecorated(true);
        frmMain.setBackground(new Color(0,0,0,0));
        frmMain.add(new TestPanel());
        frmMain.pack();
        frmMain.setLocationRelativeTo(null);
        frmMain.setVisible(true);

    }


    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    // End of variables declaration                   
}

注意:大部分代码是由 NetBeans 生成的

我所做的只是从组件托盘中添加一个JLabel,并将JPanelJLabel 的大小设置为与图像大小相同。

然后我通过Icon 属性将图像放在JLabel 中。

Setting Icon/Image

这是我运行应用程序时的样子。

Running

我希望这对将来像我这样的人有所帮助...:)

【讨论】:

    猜你喜欢
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    • 2011-02-01
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多