【问题标题】:JPanel Positioning using the Border Layout not working使用边框布局的 JPanel 定位不起作用
【发布时间】:2013-12-21 21:22:08
【问题描述】:

我正在尝试使用i.add(jp, BorderLayout.EAST); 将我的JPanel 的位置设置在右侧,但它不起作用。任何想法为什么?提前感谢您的帮助。

/* 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

【问题讨论】:

    标签: java swing jpanel jlabel border-layout


    【解决方案1】:

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

    解决方案可能很简单:使用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。请阅读您可以找到here 的布局管理器教程。

    【讨论】:

    • 当我将 i 的边框布局设置为 EAST 时,我的背景图像也会向右移动,有没有办法解决这个问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2016-01-31
    • 2014-11-08
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    相关资源
    最近更新 更多