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