使用边框布局的JPanel定位不起作用

 宁波慈城老朋友客栈 发布于 2023-02-08 17:30

我正在尝试JPanel使用i.add(jp, BorderLayout.EAST);它来设置我的位置,但它不起作用.有什么想法吗?我在这里先向您的帮助表示感谢.

/* INSTANCE DECLARATIONS */
private JTextField tf;//text field instance variable
private JLabel jl2;//label instance variable


/*****************
 * WINDOW METHOD *
 * ***************/
public void window() {

    LoadImageApp i = new LoadImageApp();//calling image class

    JFrame gameFrame = new JFrame();//declaration
    JPanel jp = new JPanel();
    JLabel jl = new JLabel("Enter a Letter:");//prompt with label

    tf = new JTextField(1);//length of text field by character
    jl2 = new JLabel("Letters Used:    ");

    jp.add(jl);//add label to panel
    jp.add(tf);//add text field to panel
    jp.add(jl2);//add letters used

    gameFrame.add(i); //adds background image to window
    i.add(jp, BorderLayout.EAST); // adds panel containing label to background image panel

    gameFrame.setTitle("Hangman");//title of frame window
    gameFrame.setSize(850, 600);//sets size of frame
    gameFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//exit when 'x' button pressed
    gameFrame.setIconImage(new ImageIcon("Hangman-Game-grey.png").getImage());//set the frame icon to an image loaded from a file
    gameFrame.setLocationRelativeTo(null);//window centered
    gameFrame.setResizable(false);//user can not resize window
    gameFrame.setVisible(true);//display frame


 }//end window method

Hovercraft F.. 5

i您的LoadImageApp实例使用什么布局管理器?我打赌不是BorderLayout.我打赌这个LoadImageApp类扩展了JPanel,如果是这样,如果你从未明确设置它的布局,那么它FlowLayout默认使用一个,并且正如你所发现的那样,FlowLayout不尊重BorderLayout.EASTint常量.

解决方案可能很简单:让它使用BorderLayout:

setLayout(new BorderLayout());

编辑
你在评论中说:

当我将i的边框布局设置为EAST时,我的背景图像也向右移动,有没有办法解决这个问题?

不,你错过了这一点.您需要将LoadImageApp的布局设置为BorderLayout.你不应该添加我的BorderLayout.EAST.这从未被推荐给你.

public class LoadImageApp extends JPanel {

  // in the constructor
  public LoadImageApp() {
    setLayout(new BorderLayout());
  }

  // .... etc....
}

应该将LoadImageApp实例(我将其命名为loadImageApp而不是i)添加到BorderLayout.CENTER中,这是您之前所做的.请阅读您可以在此处找到的布局管理器教程.

1 个回答
  • i您的LoadImageApp实例使用什么布局管理器?我打赌不是BorderLayout.我打赌这个LoadImageApp类扩展了JPanel,如果是这样,如果你从未明确设置它的布局,那么它FlowLayout默认使用一个,并且正如你所发现的那样,FlowLayout不尊重BorderLayout.EASTint常量.

    解决方案可能很简单:让它使用BorderLayout:

    setLayout(new BorderLayout());
    

    编辑
    你在评论中说:

    当我将i的边框布局设置为EAST时,我的背景图像也向右移动,有没有办法解决这个问题?

    不,你错过了这一点.您需要将LoadImageApp的布局设置为BorderLayout.你不应该添加我的BorderLayout.EAST.这从未被推荐给你.

    public class LoadImageApp extends JPanel {
    
      // in the constructor
      public LoadImageApp() {
        setLayout(new BorderLayout());
      }
    
      // .... etc....
    }
    

    应该将LoadImageApp实例(我将其命名为loadImageApp而不是i)添加到BorderLayout.CENTER中,这是您之前所做的.请阅读您可以在此处找到的布局管理器教程.

    2023-02-08 17:32 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有