Java 我遵循oracle中关于JLayer的教程,但它不适用于此代码
面板根本不显示蓝色,但我不知道为什么。 有人能帮我吗? 我就是不知道。 您的绘制方法不会覆盖超类方法,因此不会调用它。将签名更改为:Java 我遵循oracle中关于JLayer的教程,但它不适用于此代码,java,swing,jlayer,Java,Swing,Jlayer,面板根本不显示蓝色,但我不知道为什么。 有人能帮我吗? 我就是不知道。 您的绘制方法不会覆盖超类方法,因此不会调用它。将签名更改为: import java.awt.*; import javax.swing.*; import javax.swing.plaf.LayerUI; public class MyJLayer extends JFrame { public static void main(String[] args) { MyJLayer jlayer =
import java.awt.*;
import javax.swing.*;
import javax.swing.plaf.LayerUI;
public class MyJLayer extends JFrame {
public static void main(String[] args) {
MyJLayer jlayer = new MyJLayer();
jlayer.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
JButton button = new JButton("Debug Only.");
panel.add(button);
UI ui = new UI();
JLayer<JPanel> jLayer = new JLayer<JPanel>(panel, ui);
jlayer.add(jLayer);
jlayer.setSize(100, 100);
jlayer.setVisible(true);
}
}
class UI extends LayerUI<JPanel>{
public void paint(Graphics g, JPanel c){
super.paint(g, c);
Graphics2D g2d = (Graphics2D)g.create();
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, .8f));
g2d.setColor(Color.BLUE);
g2d.fillRect(0, 0, c.getWidth(), c.getHeight());
g2d.dispose();
}
}
。。。并添加@Override注释,以便将来编译器可以为您找到问题…您的paint方法不会重写超类方法,因此不会调用它。将签名更改为:
import java.awt.*;
import javax.swing.*;
import javax.swing.plaf.LayerUI;
public class MyJLayer extends JFrame {
public static void main(String[] args) {
MyJLayer jlayer = new MyJLayer();
jlayer.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
JButton button = new JButton("Debug Only.");
panel.add(button);
UI ui = new UI();
JLayer<JPanel> jLayer = new JLayer<JPanel>(panel, ui);
jlayer.add(jLayer);
jlayer.setSize(100, 100);
jlayer.setVisible(true);
}
}
class UI extends LayerUI<JPanel>{
public void paint(Graphics g, JPanel c){
super.paint(g, c);
Graphics2D g2d = (Graphics2D)g.create();
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, .8f));
g2d.setColor(Color.BLUE);
g2d.fillRect(0, 0, c.getWidth(), c.getHeight());
g2d.dispose();
}
}
。。。并添加@Override注释,以便将来编译器可以为您找到问题…show stacktrace?或任何异常?您的代码甚至会被调用吗?JPanel c的大小是多少?show stacktrace?或任何异常?您的代码甚至会被调用吗?JPanel c的尺寸是多少?谢谢!我找到了!是的,更改paintGraphics g,JPanel c->paintGraphics g,JComponent c,然后完成。谢谢!我找到了!是的,更改paintGraphics g,JPanel c->paintGraphics g,JComponent c,然后完成。