createlineborder java_java-为什么从未调用paintComponent?

我有以下代码.基本上我有一个带有背景图像的框架.我在框架中也有三个面板:面板1、2和3.2& 3工作正常,因为我没有将它们归类.但是,一旦我将其子类化,即将面板1放入JPanel的paintComponent方法中,逻辑就停止工作,因为该方法从不被调用并且foo从不被打印.我不知道为什么.感谢您的帮助.我尝试了其他类似主题的一些建议,但没有帮助.

import java.awt.Color;

import java.awt.Dimension;

import java.awt.Graphics;

import java.awt.Toolkit;

import java.awt.event.KeyAdapter;

import java.awt.event.KeyEvent;

import java.io.File;

import java.io.IOException;

import javax.imageio.ImageIO;

import javax.swing.BorderFactory;

import javax.swing.ImageIcon;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

public class Test {

public static void main(String[] args) throws IOException {

JFrame.setDefaultLookAndFeelDecorated(true);

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

int fooPanelX = 5;

int fooPanelY = 160;

int fooPanelWidth = 470;

int fooPanelHeight = 305;

int bar0PanelX = 5;

int bar0PanelY = 550;

int bar0PanelWidth = 230;

int bar0PanelHeight = 210;

int bar1PanelX = bar0PanelX * 2 + bar0PanelWidth + bar0PanelX;

int bar1PanelY = bar0PanelY;

int bar1PanelWidth = bar0PanelWidth;

int bar1PanelHeight = bar0PanelHeight;

JPanel panel1 = new Panel1(fooPanelX, fooPanelY, fooPanelWidth, fooPanelHeight);

JPanel panel2 = new JPanel();

panel2.setBackground(Color.WHITE);

panel2.setLocation(bar0PanelX, bar0PanelY);

panel2.setSize(bar0PanelWidth, bar0PanelHeight);

panel2.setOpaque(false);

panel2.setBorder(BorderFactory.createLineBorder(Color.WHITE));

panel2.setBounds(bar0PanelX, bar0PanelY, bar0PanelWidth, bar0PanelHeight);

JPanel panel3 = new JPanel();

panel3.setBackground(Color.WHITE);

panel3.setLocation(bar1PanelX, bar1PanelX);

panel3.setSize(bar1PanelWidth, bar1PanelHeight);

panel3.setOpaque(false);

panel3.setBorder(BorderFactory.createLineBorder(Color.WHITE));

panel3.setBounds(bar1PanelX, bar1PanelY, bar1PanelWidth, bar1PanelHeight);

JLabel imagePanel = new JLabel(new ImageIcon(ImageIO.read(new File("image.png"))));

JFrame frame = new JFrame();

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.addKeyListener(new KeyAdapter() {

@Override

public void keyPressed(KeyEvent e) {

if (e.getKeyCode() == 27) {

System.exit(0);

}

}

});

frame.setContentPane(imagePanel);

frame.getContentPane().add(panel1);

frame.getContentPane().add(panel2);

frame.getContentPane().add(panel3);

frame.setLocation((int) (screenSize.getWidth() * 0.75),

(int) (screenSize.getHeight() * 0.25));

frame.pack();

frame.setVisible(true);

}

@SuppressWarnings("serial")

static class Panel1 extends JPanel {

int x, y, w, h;

public Panel1(int x, int y, int w, int h) {

this.x = x;

this.y = y;

this.w = w;

this.h = h;

}

@Override

public void paintComponent(Graphics graphics) {

System.out.println("foo");

super.paintComponents(graphics);

setBackground(Color.WHITE);

setLocation(x, y);

setSize(w, h);

setOpaque(true);

setBorder(BorderFactory.createLineBorder(Color.WHITE));

}

}

}

更新:如果您找不到问题,那么可以为我提供一种替代方法来执行以下操作.我需要一个带有背景图像的框架,并在背景图像的顶部有三个面板.这三个面板必须在背景图像上具有像素完美的位置和大小,才能看起来正确.就是这样.我将重新粉刷三个面板,但是背景图像将保持不变.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值