java - 如何在不显示 jframe 或 jpanel 的情况下仅显示按钮?

标签 java swing jframe jbutton

下面的示例将显示带有 jframe 窗口的按钮。我只想让按钮可见,如何实现?

public final void initUI() {

  JPanel panel = new JPanel();
  getContentPane().add(panel);

  panel.setLayout(null);

  JButton quitButton = new JButton("Quit");
   quitButton.setBounds(50, 60, 80, 30);
   quitButton.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent event) {
           System.exit(0);
      }
   });

   panel.add(quitButton);

   setTitle("Quit button");
   setSize(300, 200);
   setLocationRelativeTo(null);
   setDefaultCloseOperation(EXIT_ON_CLOSE);
}

最佳答案

根据您所说的“没有 jframe 或 jpanel 可见?”的意思,您可以创建一个透明窗口...

Boo

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class GhostButton {

    public static void main(String[] args) {
        new GhostButton();
    }

    public GhostButton() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JButton ghostButton = new JButton("Boo!");
                ghostButton.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        System.exit(0);
                    }
                });

                JFrame frame = new JFrame("Testing");
                frame.setUndecorated(true);
                frame.setBackground(new Color(0,0,0,0));
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(ghostButton);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

}

如果你删除 frame.setBackground(new Color(0,0,0,0));,你会得到一个无框的窗口

ps- 这在 Java 7+ 下工作,有让它在 Java 6 下工作的技巧,但我没有在这里发布

关于java - 如何在不显示 jframe 或 jpanel 的情况下仅显示按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22625379/

相关文章:

java - 不同机器上的字体及其大小

Swing 更改 JScrollPane 内容

java - 打开一个新的 JFrame

java - 谷歌日历 API : Updating Reminders to an event

java - 使用 String.matches 将 PHP preg_match 逻辑移植到 Java 时不兼容

java - Android:WireMock:com.android.dex.DexIndexOverflowException:方法ID不在[0,0xffff]中:65536

Java:将 JFrame 焦点转移到另一个 JFrame

java - 将 XML 文件拆分为多个文件,每个文件有 500 个标签

java - 如何指示表中的列是可排序的(UI 设计问题)?

java - 我的主方法中的哪个语句正在调用我的其他类和我的主类中的所有其他方法?