jframe和ImagePanel之间的java间隙

jframe和ImagePanel之间的java间隙,java,swing,jframe,jpanel,gaps-in-visuals,Java,Swing,Jframe,Jpanel,Gaps In Visuals,我有一个JLayeredPane,它添加了三个对象,问题是背景图像当应用程序运行时,jframe和背景图像之间有一个间隙,我将其设置为(0,0),无论我做什么更改,间隙仍然存在(我想消除间隙)。如果我复制backgroundImage类并将其放在另一个文件/类中,则间隙不存在。有人能帮忙吗 public class NavigationMenu extends JPanel { private ArrayList<String> Menu = new ArrayList(); pr

我有一个JLayeredPane,它添加了三个对象,问题是背景图像当应用程序运行时,jframe和背景图像之间有一个间隙,我将其设置为(0,0),无论我做什么更改,间隙仍然存在(我想消除间隙)。如果我复制backgroundImage类并将其放在另一个文件/类中,则间隙不存在。有人能帮忙吗

public class NavigationMenu extends JPanel {

private ArrayList<String> Menu = new ArrayList();
private int MenuSize;
private int MenuChannel = 0;
private Font realFont;
private static Dimension screenSize = new Dimension(new ScreenDimensions().getScreenWidth(), new ScreenDimensions().getScreenHeight());
private static final int MENU_HEIGHT = (int)(new ScreenDimensions().getScreenHeight()*0.1);
private static final int MENU_WIDTH = new ScreenDimensions().getScreenWidth();
private static final int MENU_CENTER = (new ScreenDimensions().getScreenHeight() / 2) - (MENU_HEIGHT / 2);

public NavigationMenu() {

    //Add Menu Channels
    setPreferredSize(screenSize);
    setBounds(0,0,MENU_WIDTH,screenSize.height);
    this.Menu.add("MOVIES");
    this.Menu.add("MUSIC");
    this.Menu.add("PICTURES");
    this.Menu.add("VIDEOS");
    this.Menu.add("TV SHOWS");
    this.Menu.add("WEATHER");
    this.Menu.add("RADIO");
    this.Menu.add("SETTINGS");
    this.MenuSize = Menu.size() - 1;

    JLayeredPane pfinal = new JLayeredPane();
    JPanel _menuText = new menuText();
    JPanel _backgroundImage = new backgroundImage("Backgrounds/curtains.png");
    JPanel _bar = new bar();

    pfinal.setPreferredSize(screenSize);
    pfinal.setBounds(0,0,MENU_WIDTH,screenSize.height);

    pfinal.add(_backgroundImage, new Integer(1));
    pfinal.add(_bar, new Integer(2));
    pfinal.add(_menuText, new Integer(3));

    add(pfinal);
}

public class bar extends JPanel {
    public bar() {
        setBounds(0,MENU_CENTER,MENU_WIDTH, MENU_HEIGHT);
        setOpaque(false);
    }
    @Override
    protected void paintComponent(Graphics g) {
        Graphics2D g2d = (Graphics2D)g;
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.8f));
        g2d.setColor(Color.BLACK);
        g2d.fillRect(0,0,screenSize.width,MENU_HEIGHT);
    }
}

public class menuText extends JPanel {

    public menuText() {
        setBounds(0,MENU_CENTER,MENU_WIDTH,MENU_HEIGHT);
        setOpaque(false);
        setFocusable(true);
        requestFocusInWindow();

        try {
            realFont = new RealFont(((int)(MENU_HEIGHT * 0.80))).getRealFont();
        } catch (Exception e) {
            System.out.println(e.toString());
        }
        addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                //JOptionPane.showMessageDialog(null, "OK");
                int keyCode = e.getKeyCode();
                    switch (KeyEvent.getKeyText(keyCode)) {
                        case "Up":
                            //JOptionPane.showMessageDialog(null, "Up");
                            if(MenuChannel < MenuSize) {
                                MenuChannel++; 
                                repaint();
                            } else {
                                MenuChannel = 0; //reset
                                repaint();
                            }
                        break;
                        case "Down":
                            if(MenuChannel == 0) {
                                MenuChannel = MenuSize + 1;
                                MenuChannel--;
                                repaint();
                            } else {
                                MenuChannel--;
                                repaint();
                            }   
                        break;
                    }
            }
        });
    }

    @Override
    protected void paintComponent(Graphics g) {
        Graphics2D g2d = (Graphics2D)g;
        String MenuString = Menu.get(MenuChannel);
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        //g2d.setBackground(Color.PINK);
        //g2d.fillRect(0,0,getWidth(),getHeight());
        g2d.setColor(Color.WHITE);
        g2d.setFont(realFont);
        FontRenderContext context = g2d.getFontRenderContext();
        java.awt.geom.Rectangle2D rect = realFont.getStringBounds(MenuString, context);
        int textHeight = (int)rect.getHeight();
        int textWidth = (int)rect.getWidth();
        int panelHeight = getHeight();
        int panelWidth = getWidth();
        int x = (panelWidth - textWidth) / 2;
        int y = (panelHeight - textHeight) / 2;
        //System.out.println("f:"+ fontMetrics.gettH:" + textHeight + "\ntW:" + textWidth + "\npH:" + panelHeight + "\npW:" + panelWidth);
        g2d.drawString(MenuString,x,(float)-rect.getY()+2);
    }
}

public class backgroundImage extends JPanel {

    private Image icon;
    private int screenWidth = new ScreenDimensions().getScreenWidth();
    private int screenHeight = new ScreenDimensions().getScreenHeight();

    public backgroundImage(String background) {
        icon = new ImageIcon(background).getImage();
        Dimension size = new Dimension(screenWidth,screenHeight);
        setPreferredSize(size);
        setMinimumSize(size);
        setMaximumSize(size);
        setSize(size);
        setLayout(null);

    }

    @Override
    protected void paintComponent(Graphics g) {
        g.drawImage(icon,0,0,screenSize.width,screenSize.height,null);
    }
}
}
公共类导航菜单扩展了JPanel{
私有ArrayList菜单=新建ArrayList();
私有菜单化;
private int MenuChannel=0;
私有字体realFont;
私有静态维度screenSize=新维度(新的ScreenDimensions().getScreenWidth(),新的ScreenDimensions().getScreenHeight());
私有静态最终int菜单_HEIGHT=(int)(新屏幕尺寸().getScreenHeight()*0.1);
私有静态最终整型菜单_WIDTH=new ScreenDimensions().getScreenWidth();
私有静态最终整数菜单\u中心=(新屏幕尺寸().getScreenHeight()/2)-(菜单\u高度/2);
公共导航菜单(){
//添加菜单频道
设置首选大小(屏幕大小);
设置边界(0,0,菜单宽度,屏幕大小,高度);
这个.Menu.add(“电影”);
这个。菜单。添加(“音乐”);
这个。菜单。添加(“图片”);
这个。菜单。添加(“视频”);
此.Menu.add(“电视节目”);
这个。菜单。添加(“天气”);
此.Menu.add(“收音机”);
此.Menu.add(“设置”);
this.MenuSize=Menu.size()-1;
JLayeredPane pfinal=新的JLayeredPane();
JPanel_menuText=新的menuText();
JPanel_backgroundImage=新的背景图像(“Backgrounds/events.png”);
JPanel_bar=新条();
p最终设置首选大小(屏幕大小);
p最终设置边界(0,0,菜单宽度,屏幕大小,高度);
p最后添加(_backgroundImage,新整数(1));
p最后添加(_条,新整数(2));
p最后添加(_menuText,新整数(3));
添加(最终);
}
公共类栏扩展了JPanel{
公共酒吧(){
设置边界(0,菜单中心,菜单宽度,菜单高度);
设置不透明(假);
}
@凌驾
受保护组件(图形g){
Graphics2D g2d=(Graphics2D)g;
g2d.setRenderingHint(renderingHits.KEY\u抗锯齿,renderingHits.VALUE\u抗锯齿\u开启);
setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,0.8f));
g2d.setColor(Color.BLACK);
g2d.fillRect(0,0,屏幕大小、宽度、菜单高度);
}
}
公共类menuText扩展了JPanel{
公共菜单文本(){
设置边界(0,菜单中心,菜单宽度,菜单高度);
设置不透明(假);
设置聚焦(真);
requestFocusInWindow();
试一试{
realFont=新的realFont((int)(菜单高度*0.80)).getRealFont();
}捕获(例外e){
System.out.println(例如toString());
}
addKeyListener(新的KeyAdapter(){
@凌驾
按下公共无效键(按键事件e){
//showMessageDialog(空,“确定”);
int keyCode=e.getKeyCode();
开关(KeyEvent.getKeyText(keyCode)){
案例“Up”:
//showMessageDialog(null,“Up”);
if(MenuChannel
将NavigationMenu的布局更改为BorderLayout

你能做一个屏幕截图来可视化吗?我运行你的代码,并且system WindowManager顶栏和
JFrame
内容之间没有间隙-你的
NavigationMenu
啊,我不能发布任何图像,除非我的重复次数超过10次