当前位置: 首页 > 知识库问答 >
问题:

将JPanel定位在JFrame中的特定位置

阎宾实
2023-03-14

我需要一个帮助来定位一个JPanel在一个特定的位置到一个Jframe。

我在一个扩展JFrame的类中有一个JPanel,我需要将这个JPanel放在一个特定的x,y位置。

是这样的:

public class Frame extends JFrame {

    public Frame(){

        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setLocation(250, 250);
        this.setSize(300,300);
        this.setVisible(true);

        JPanel panel = new JPanel();
        this.add(panel);
        panel.setLocation(150, 150);
        panel.add(new JButton("Hello!")); // just to show JPanel

    }//Frame()
}//Frame

我不需要一个LayoutManager的位置的JPanel,因为我需要把JPanel在一个特定的位置(像150,150的例子)。但是如果我panel.set位置(150,150),就像上面的代码一样,什么都不会发生,并且JPanel仍然位于框架的北中心(如果我改变x, y数字而不是150,150)。

它显示如下:

http://i.imgur.com/Te3z0kv.png

共有3个答案

璩珂
2023-03-14

JFrame对象默认使用borderlayout管理器,JPanel默认使用framelayout管理器。如果要使用绝对定位,则必须使用null布局,因为任何其他布局管理器都将根据其自身的情绪而不是您想要的方式使用setLocation()和setSize()方法。

小结:使用setLayout(null)和null管理器,然后使用setBounds(X,Y,width,height)方法。

王声
2023-03-14

使用setBound(新矩形(96, 67, 98, 41));您可以这样做...

/**
 * This method initializes this
 *
 * @return void
 */
private void initialize() {
    this.setSize(300, 200);
    this.setContentPane(getJContentPane());
    this.setTitle("JFrame");
}

/**
 * This method initializes jContentPane
 *
 * @return javax.swing.JPanel
 */
private JPanel getJContentPane() {
    if (jContentPane == null) {
        jContentPane = new JPanel();
        jContentPane.setLayout(null);
        jContentPane.add(getLoginButton(), null);
    }
    return jContentPane;
}

}

齐胜涝
2023-03-14

默认情况下,框架的内容面板的布局管理器是BorderLayout(NWSE C)。做:

this.getContentPanel().setLayout(null);
 类似资料:
  • 我想将包含send按钮和textfield(现在使用flowlayout)的JPanel放置在JTextArea(白色区域)的底部。我怎样才能做到这一点?

  • 我在 netbeans 的 GUI 设计器中设计了一个 GV 框架,它有 1 个文本区域、2 个文本框和 1 个 jButtons,它们位于框架的右侧。现在我想在这些组件左侧的 GV 框架中添加一个自定义 JPanel。像这样: http://s25.postimg.org/3lggsdusf/Othe.png 主网格面板(直接构建在班级内部 可以看出,我试图通过 GUI 编辑器通过自动生成的 i

  • 但是,我的程序稍后尝试将一个新的JPanel添加到类的扩展JPanel中,方法是: 这个新的JPanel以正确的BorderLayout格式显示内容,但是JPanel本身将保持在扩展JPanel的顶部中心,我知道这是因为默认布局设置为FlowLayout,但是将其设置为BorderLayout只会导致面板占用整个屏幕。将布局设置为null将完全破坏框架,除了框架的最小化和关闭按钮之外,什么也没有出

  • 我有一个JFrame,里面装满了JPanel(下面的代码)。 我正在使用JPanel在里面画东西,例如,我可以在任何我喜欢的地方画线,但是当添加JLabel到它的时候,我不能把它移动到它卡住的任何地方 但问题是他们建议的解决方案对我不起作用。 很抱歉,如果我不清楚,我试图在创建Surface之前和之后在函数initUI()中添加上面的内容。 但是在那之后,框架显示几乎(1,1)大小和它的空(如果我

  • 问题内容: 我需要绘制一个水平直方图,并且按如下所示设置直方图的标签, 有人能找出这里有什么问题吗? 为什么不显示其他标签? 问题答案: 这个问题的答案的问题是,你不应该使用(这在JFrame默认情况下使用),而是使用GridLayout。这样 您就可以将添加到。一个示例如下所示:

  • 问题内容: 我将JPanel包裹在JScrollPane中,我希望始终将矩形绘制在同一位置上=使用滚动条移动不会影响矩形的可见性。 我尝试了以下代码: 但是仅当更改整个JPanel的大小时才重新绘制矩形。 问题答案: IIRC 将尝试最大程度地减少滚动完成时的重绘次数,因此它不会总是导致组件被更新。 标准技术是使用。将您添加到下层,并在其上面添加不透明的玻璃面板组件。请参阅Swing教程中的如何使