问题
Is there any way to put the JLabel in front of the rectangle? Currently, the JLabel is underneath the rectangle.
Here is my relevant code:
public class MainMenu_South extends JPanel {
MainMenu_BlueJay t;
JLabel start=new JLabel("START");
@Override
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.blue);
g2d.drawRect(0, 30, 900, 30);
g2d.fillRect(0, 30, 900, 30);
}
public MainMenu_South(MainMenu_BlueJay t){
setLayout(null);
this.t=t;
setBackground(Color.white);
start.setForeground(Color.red);
start.setFont(new Font("Arial", Font.BOLD, 16));
add(start);
start.setBounds(100, 10, 100, 50);
start.addMouseListener(ml);
}
MouseListener ml=new MouseListener() {
@Override
public void mouseEntered(MouseEvent e) {//hover
start.setForeground(Color.white);
}
@Override
public void mouseExited(MouseEvent e) {
start.setForeground(Color.red);
}
};
}
回答1:
for better help sooner post an MCVE
use
paintComponent()
for Swing JComponents instead ofpaint()
there isn't reason to use
NullLayout
, useLayoutManager
,override
getPreferredSize
forJPanel
, thenJFrame.pack()
will generate expectedDimension
on the screenJLabel
is transparent, you have tosetOpaque
if you to want to dispalyColor
asBackgroung
inJlabel
you have to use
repaint(last code line)
forMouseEvents
andColor
forJLabel
, override MouseAdaptermiss any, no idea if you would need use transparency or tranclucency, or remove the JLabel
来源:https://stackoverflow.com/questions/21076693/put-jlabel-in-front-of-graphics-2d-rectangle-in-jpanel