如何通过覆盖 paintComponent 为 JFrame 设置背景?
How to set a background to JFrame by over-riding paintComponent?
我刚开始 Java GUI,我想通过覆盖 paintComponent(Graphics g) 方法为 JFrame 设置背景图像,以便我能够在图像上添加子组件。我看过其他答案,但代码对初学者来说太复杂了
请使用以下代码解释这是如何完成的:
public class staffGUI extends JFrame {
public staffGUI(){
super("Staff Management");
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setResizable(false);
this.pack();
}
}
public class staffGUI extends JFrame {
public staffGUI(){
super("Staff Management");
this.setContentPane(new MyContentPane("C://somePath//image.jpg"));
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setResizable(false);
this.pack();
}
private class MyContentPane extends JPanel
{
private BufferedImage image;
public MyContentPane(String path){
try{
image = ImageIO.read(new File(path));
}catch(IOException e){
e.printStackTrace();
image = new BufferedImage(100 , 100 , BufferedImage.TYPE_INT_ARGB);
Graphics g = image.getGraphics();
g.setColor(Color.blue);
g.fillRect(0 , 0 , 100 , 100);
g.dispose();
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawImage(image , 0 , 0 , getWidth() , getHeight() , null);
}
}
}
框架中的 Painting 始终在框架的内容窗格中完成。内容窗格也是添加组件的地方。 MyContentPane
从给定路径加载 BufferedImage
。如果加载失败,则会创建一个蓝色矩形作为图像。通过将示例代码中的内容窗格设置为 MyContentPane
的实例,您可以 MyContentPane
渲染框架的完整内部区域。
我刚开始 Java GUI,我想通过覆盖 paintComponent(Graphics g) 方法为 JFrame 设置背景图像,以便我能够在图像上添加子组件。我看过其他答案,但代码对初学者来说太复杂了
请使用以下代码解释这是如何完成的:
public class staffGUI extends JFrame {
public staffGUI(){
super("Staff Management");
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setResizable(false);
this.pack();
}
}
public class staffGUI extends JFrame {
public staffGUI(){
super("Staff Management");
this.setContentPane(new MyContentPane("C://somePath//image.jpg"));
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setResizable(false);
this.pack();
}
private class MyContentPane extends JPanel
{
private BufferedImage image;
public MyContentPane(String path){
try{
image = ImageIO.read(new File(path));
}catch(IOException e){
e.printStackTrace();
image = new BufferedImage(100 , 100 , BufferedImage.TYPE_INT_ARGB);
Graphics g = image.getGraphics();
g.setColor(Color.blue);
g.fillRect(0 , 0 , 100 , 100);
g.dispose();
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawImage(image , 0 , 0 , getWidth() , getHeight() , null);
}
}
}
框架中的 Painting 始终在框架的内容窗格中完成。内容窗格也是添加组件的地方。 MyContentPane
从给定路径加载 BufferedImage
。如果加载失败,则会创建一个蓝色矩形作为图像。通过将示例代码中的内容窗格设置为 MyContentPane
的实例,您可以 MyContentPane
渲染框架的完整内部区域。