【问题标题】:Putting JPanels on JFrame in specific areas在特定区域将 JPanels 放在 JFrame 上
【发布时间】:2017-07-07 18:15:15
【问题描述】:

很抱歉没有在上一篇文章中添加特定代码。我意识到我做错了什么,但现在又遇到了另一个问题。单击按钮后,我试图将 JPanel 放置在 JFrame 上的特定位置,但没有任何反应,这是我的 Actionperformed 方法的代码。

public void actionPerformed(ActionEvent e) 
    {


          JPanel pa=new JPanel();
          frame.getContentPane().setLayout(null);
          pa.setBackground(Color.yellow);
          pa.setLocation(50,150);
          pa.setSize(150,100);
          pa.setBounds(50,150,150,100);
          pa.setOpaque(true);
          frame.add(pa);


    }                        

【问题讨论】:

  • 请添加一些源代码作为具体示例,以便其他人可以提供帮助。目前你的问题就像“出了点问题,我不知道为什么”
  • 如果您发布您的代码,我将很乐意提供帮助。
  • @Tommy 我在帖子中添加了一些代码。我对编码很陌生,所以任何帮助都会很棒。
  • @NikhilSrikumar 感谢您分享您的代码。我会看看我能做什么。你想把面板放在哪里?
  • 在坐标 (50,150)

标签: java swing user-interface layout-manager null-layout-manager


【解决方案1】:

有很多方法可以做到这一点。

  1. 使用setLocation(x, y)setSize(length, width)

  2. 使用setBounds(x, y, length, width)

  3. 如果 1 和 2 不起作用,请查看布局管理器:

我强烈建议您查看Layout Managers JavaDoc。下面是每个链接,我会为您推荐的链接旁边有一个星号 (*)。

  • BorderLayout* 用于一般方向(北、南、东、西)

  • BoxLayout 将组件放在单行或单列中。它尊重组件请求的最大尺寸,还允许您对齐组件。

  • CardLayout 允许您实现一个在不同时间包含不同组件的区域,通常由组合框控制,组合框的状态决定 CardLayout 显示哪个面板(组件组)。

  • FlowLayout 是每个 JPanel 的默认布局管理器。它只是将组件布置在一行中。

  • GridBagLayout 是一个成熟、灵活的布局管理器。它通过将组件放置在单元格网格中来对齐组件,从而允许组件跨越多个单元格。网格中的行可以有不同的高度,而网格列可以有不同的宽度。

  • GridLayout* 只是让一堆大小相等的组件,并以请求的行数和列数显示它们。

  • GroupLayout 是为 GUI 构建器工具开发的布局管理器,但也可以手动使用。 GroupLayout 分别使用水平和垂直布局。布局是为每个维度独立定义的。然而,因此,每个组件都需要在布局中定义两次。

  • SpringLayout 是一个灵活的布局管理器,专为 GUI 构建者使用而设计。它使您可以指定受其控制的组件边缘之间的精确关系。例如,您可以定义一个组件的左边缘与第二个组件的右边缘有一定的距离(可以动态计算)。 SpringLayout 根据一组约束对其关联容器的子项进行布局。

免责声明:其中大部分是 Oracle JavaDoc 关于布局管理器的直接引用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-12
    • 2019-11-28
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    相关资源
    最近更新 更多