使用 GridBagLayout 将按钮定位在菜单栏下方

2023-12-22

我想将下面的两个按钮添加到JMenuBar。我正在使用根JPanel对于 GUI 的整个窗口,我向其中添加了不同的组件,到目前为止,有两个,菜单栏和包含两个按钮的面板。但我不知道如何放置GridBagConstraints对于包含按钮的面板,其放置在菜单栏的正下方。

这是我的代码:

JFrame f = new JFrame("Cliente AEMET");
JPanel panel_raiz = new JPanel();//root JPanel
GridBagConstraints gbc = new GridBagConstraints();

public VentanaPrincipal (){


    f.setSize(500, 400);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    panel_raiz.setLayout(new GridBagLayout());
    //textoInfoMunicipio();
    //ventana_aviso(); //descomentar si se quiere ver el JDialog    
    //lista();
    menus(); //the JMenuBar
    botones(); //the buttons
    //lista_desplegable();
    //d.acerca_de();
    f.setContentPane(panel_raiz); //here I put all the components in the root jpanel
    f.setVisible(true); //esto siempre tiene que ir lo ultimo
}
public void menus(){ //this function puts the JMenuBar

    JMenuBar menuBar;
    JMenu archivo, ayuda;
    JMenuItem menuItem;

    //creamos la barra de menus
    menuBar = new JMenuBar();

    //vamos a crear los menus
    archivo = new JMenu("Archivo");
    ayuda = new JMenu("Ayuda");

    menuItem = new JMenuItem("Crear Municipio");
    archivo.add(menuItem);
    menuItem = new JMenuItem("Borrar Municipio");
    archivo.add(menuItem);
    menuItem = new JMenuItem("Salir");
    archivo.add(menuItem);

    menuItem = new JMenuItem("Acerca de");
    ayuda.add(menuItem);

    //los añadimos
    menuBar.add(archivo);
    menuBar.add(ayuda);

    //aqui ya habría que hacer la parte del gridBagLayout
    gbc.gridx = 0;
    gbc.gridy = 0;
    gbc.gridwidth = GridBagConstraints.REMAINDER;
    gbc.fill = GridBagConstraints.HORIZONTAL;
    gbc.anchor  = GridBagConstraints.NORTHWEST;
    gbc.weightx = 1.0;
    gbc.weighty = 0.5;

    panel_raiz.add(menuBar, gbc);
    //f.setContentPane(panel_raiz);
    //f.setJMenuBar(menuBar); esto lo teniamos antes de poner el gridBagLayout

}
public void botones(){

    ImageIcon addBBDD = new ImageIcon("./iconos/database-add-icon.png");
    ImageIcon deleteBBDD  = new ImageIcon("./iconos/database-delete-icon.png");
    JButton b1,b2;
    JPanel panel = new JPanel();


    panel.setLayout(new FlowLayout(FlowLayout.LEFT));
    b1 = new JButton("Municipio");
    b1.setIcon(addBBDD);
    panel.add(b1);
    b2 = new JButton("Municipio");
    b2.setIcon(deleteBBDD);
    panel.add(b2);

    //vamos a poner los constraints del gbl para los botones

    //gbc.gridx = 1;
    gbc.gridy = GridBagConstraints.RELATIVE;
    gbc.gridheight = GridBagConstraints.REMAINDER;
    gbc.fill = GridBagConstraints.VERTICAL;
    gbc.anchor  =GridBagConstraints.LINE_START;
    //gbc.weightx = 0.5;



    panel_raiz.add(panel,gbc);
    //f.setContentPane(panel_raiz); no hace falta, pues en el constructor al final, ponemos todo el panel con lo que fuimos añadiendo en cada metodo

    //esto lo teniamos antes de poner el gridbaglayout
    //f.setContentPane(panel);
    //f.pack();

}

我想将按钮放在菜单栏的正下方,但我不知道如何做。


panel_raiz.add(menuBar, gbc);

菜单栏不应添加到面板中,而应添加到框架中:

f.setJMenuBar( menuBar);

但我不知道如何将包含按钮的面板的 GridBagConstraints 放置在菜单栏下方。

不需要使用 GridBagLayout 的面板。只是:

  1. 创建一个面板
  2. 将面板的布局设置为FlowLayout即“左对齐”。
  3. 添加按钮到面板
  4. 使用以下命令将面板添加到框架中f.add(panel, BorderLayout.PAGE_START)

阅读 Swing 教程中的部分如何使用菜单 https://docs.oracle.com/javase/tutorial/uiswing/components/menu.html用于工作示例。本教程还有一节介绍Layout Mangers。保留一个指向 Swing 基础知识教程的链接。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 GridBagLayout 将按钮定位在菜单栏下方 的相关文章

  • 如何将本机库链接到 IntelliJ 中的 jar?

    我正在尝试在 IntelliJ 中设置 OpenCV 但是我一直在弄清楚如何告诉 IntelliJ 在哪里可以找到本机库位置 在 Eclipse 中 添加 jar 后 您可以在 Build Config 屏幕中设置 Native 库的位置
  • 如何让 BlazeDS 忽略属性?

    我有一个 java 类 它有一个带有 getter 和 setter 的字段 以及第二对 getter 和 setter 它们以另一种方式访问 该字段 public class NullAbleId private static final
  • 不同帐户上的 Spring Boot、JmsListener 和 SQS 队列

    我正在尝试开发一个 Spring Boot 1 5 应用程序 该应用程序需要侦听来自两个不同 AWS 帐户的 SQS 队列 是否可以使用 JmsListener 注解创建监听器 我已检查权限是否正确 我可以使用 getQueueUrl 获取
  • 在内存中使用 byte[] 创建 zip 文件。 Zip 文件总是损坏

    我创建的 zip 文件有问题 我正在使用 Java 7 我尝试从字节数组创建一个 zip 文件 其中包含两个或多个 Excel 文件 应用程序始终完成 没有任何异常 所以 我以为一切都好 当我尝试打开 zip 文件后 Windows 7 出
  • 为什么 JTables 使 TableModel 在呈现时不可序列化?

    所以最近我正在开发一个工具 供我们配置某些应用程序 它不需要是什么真正令人敬畏的东西 只是一个具有一些 SQL 脚本生成功能并创建几个 XML 文件的基本工具 在此期间 我使用自己的 AbstractTableModel 实现创建了一系列
  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并
  • HSQL - 识别打开连接的数量

    我正在使用嵌入式 HSQL 数据库服务器 有什么方法可以识别活动打开连接的数量吗 Yes SELECT COUNT FROM INFORMATION SCHEMA SYSTEM SESSIONS
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • 没有 Spring 的自定义 Prometheus 指标

    我需要为 Web 应用程序提供自定义指标 问题是我不能使用 Spring 但我必须使用 jax rs 端点 要求非常简单 想象一下 您有一个包含键值对的映射 其中键是指标名称 值是一个简单的整数 它是一个计数器 代码会是这样的 public
  • 将流转换为 IntStream

    我有一种感觉 我在这里错过了一些东西 我发现自己做了以下事情 private static int getHighestValue Map
  • Eclipse Maven Spring 项目 - 错误

    I need help with an error which make me crazy I started to study Java EE and I am going through tutorial on youtube Ever
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • volatile、final 和synchronized 安全发布的区别

    给定一个带有变量 x 的 A 类 变量 x 在类构造函数中设置 A x 77 我们想将 x 发布到其他线程 考虑以下 3 种变量 x 线程安全 发布的情况 1 x is final 2 x is volatile 3 x 设定为同步块 sy
  • Java ResultSet 如何检查是否有结果

    结果集 http java sun com j2se 1 4 2 docs api java sql ResultSet html没有 hasNext 方法 我想检查 resultSet 是否有任何值 这是正确的方法吗 if resultS
  • 获取文件的总大小(以字节为单位)[重复]

    这个问题在这里已经有答案了 可能的重复 java 高效获取文件大小 https stackoverflow com questions 116574 java get file size efficiently 我有一个名为 filenam
  • 为什么 Java 8 不允许非公共默认方法?

    让我们举个例子 public interface Testerface default public String example return Hello public class Tester implements Testerface
  • Android:无法使用 DbHelper 和 Contract 类将数据插入 SQLite

    public class Main2Activity extends AppCompatActivity private EditText editText1 editText2 editText3 editText4 private Bu
  • 使用 svn 1.8.x、subclise 1.10 的 m2e-subclipse 连接器在哪里?

    我读到 m2e 的生产商已经停止生产 svn 1 7 以外的任何版本的 m2e 连接器 Tigris 显然已经填补了维护 m2e subclipse 连接器的空缺 Q1 我的问题是 使用 svn 1 8 x 的 eclipse 更新 url
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • Java中super关键字的范围和使用

    为什么无法使用 super 关键字访问父类变量 使用以下代码 输出为 feline cougar c c class Feline public String type f public Feline System out print fe

随机推荐