Como deixar JButton transparente?

Eu tenho um JFrame com uma imagem de fundo e um JButton por cima, como faço o JButton ficar transparente e só deixar o texto dele?

Estou procurando na documentação do Jbutton mais não encontro ate o momento não encontrei nada para deixar apenas o botão invisível deixando só o texto aparecendo, já pensou em usar um Jlabel pra isso?

Só que eu preciso clicar, como vou clicar num label? ‘-’

Na ide que eu utilizo NetBeans, existe um Evento chamado mouseClicked

Documentação das classes:
https://docs.oracle.com/javase/8/docs/api/

meuObjetoJButton.setOpaque(false);

btnJogar.setOpaque(false);

Simplesmente não aconteceu nada ‘-’

E como deixo o label transparente?

O container pai também precisa estar sem opacidade para você perceber diferença.
JLabel também tem o método setOpaque.

Se quiser forçar mais ainda a barra:

button.setOpaque(false);
button.setContentAreaFilled(false);
button.setBorderPainted(false);

Ainda não ficou transparente, mas ficou todo esbranquiçado.

Olha como está:

package br.paulo.damas.gui;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class Menu extends JFrame implements ActionListener {
	
	private static final long serialVersionUID = 1L;
	
	private String imgMenu = "/br/paulo/damas/res/backgroundMenu.png";
	private int x = 0;
	private int y = 0;
	private JButton btnJogar;
	
	public Menu() {
		
		this.setTitle("Damas");
		this.setSize(400,400);
		this.setLocationRelativeTo(null);
		this.setLayout(null);
		
		btnJogar = new JButton("Jogar");
		btnJogar.setBounds(0,0,100,30);
		btnJogar.setOpaque(false);
		btnJogar.setContentAreaFilled(false);
		btnJogar.setBorderPainted(false);
		
		btnJogar.addActionListener(this);
		
		
		JPanel pn = new JPanel();
		pn.setLayout(new GridLayout(1,1));
		pn.setBounds(80,35,235,45);
		pn.add(btnJogar);
		
		this.add(pn);
		this.setVisible(true);
		this.setResizable(false);
		this.setDefaultCloseOperation(3);
		
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if(e.getSource() == btnJogar) {
			JOptionPane.showMessageDialog(null, "t");
		}
	}
	@Override
	public void paint(Graphics g) {
		
		try {
			BufferedImage buffer = ImageIO.read(getClass().getResource(imgMenu));
			super.paintComponents(g);
			Graphics2D g2d = (Graphics2D) g.create();
			g2d.drawImage(buffer,x,y,400,400, this);
			g.dispose();
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

Testei este método antes de responder,mais não deu certo, pra isso é precisar deixar o Jframe opaco também?

Você não quer deixar opaco, quer deixar transparente.

Você está com problema devido à forma como sobrescreveu o método paint(Graphics) do JFrame.

Não sobrescreva o paint(Graphics) do JFrame.

Ao invés disso, crie o seu próprio ImagePanel que aceite uma imagem de fundo e sobrescreva somente o método paintComponent(Graphics) , veja:

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;

import javax.imageio.ImageIO;
import javax.swing.JPanel;

/**
 * Painel que aceita uma imagem de fundo
 */
public class ImagePanel extends JPanel {

	private static final long serialVersionUID = 1L;

	private final BufferedImage imagem;

	public ImagePanel(String resource) {
		BufferedImage buffer = null;
		try {
			buffer = ImageIO.read(getClass().getResourceAsStream(resource));
		} catch (Exception e) {
			e.printStackTrace();
		}
		imagem = buffer;
	}

	@Override
	protected void paintComponent(Graphics g) {
		Dimension size = getSize();
		g.drawImage(imagem, 0, 0, size.width, size.height, this);
	}
}

Agora utilize este ImagePanel no seu JFrame, veja:

import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class Menu extends JFrame {

	private static final long serialVersionUID = 1L;

	private String imgMenu = "/br/paulo/damas/res/backgroundMenu.png";
	private JButton btnJogar;

	public Menu() {
		// utilize como container um painel próprio para renderizar uma imagem de fundo
		ImagePanel imagePanel = new ImagePanel(imgMenu);
		this.setContentPane(imagePanel);

		this.setTitle("Damas");
		this.setSize(400, 400);
		this.setLocationRelativeTo(null);
		this.setLayout(null);

		btnJogar = new JButton("Jogar");
		btnJogar.setBounds(0, 0, 100, 30);
		btnJogar.setOpaque(false);
		btnJogar.setContentAreaFilled(false);
		btnJogar.setBorderPainted(false);

		btnJogar.addActionListener(event -> pressionouBtnJogar());

		JPanel painel = new JPanel();
		painel.setOpaque(false); // o container do botão também tem que ser transparente
		painel.setLayout(new GridLayout(1, 1));
		painel.setBounds(80, 35, 235, 45);
		painel.add(btnJogar);

		this.add(painel);
		this.setVisible(true);
		this.setResizable(false);
		this.setDefaultCloseOperation(3);

	}

	private void pressionouBtnJogar() {
		JOptionPane.showMessageDialog(null, "t");
	}
}

Funcionou direitinho vlw

1 curtida