有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JPanel中的java插入按钮

我在Java中使用swing,我需要创建一个JButton并将其放在一个JPanel中

我学习了里德教程,我做到了:

public void crearNuevaMiga(String nombre)
{
    JButton nuevo = new JButton(nombre);
    this.MigasDePan.add(nuevo);
    nuevo.setVisible(true);
    nuevo.setLocation(new Point(migaX, migaY));
    System.out.println(nuevo.getLocation().x + " "+ nuevo.getLocation().y);
    migaX = migaX-avanceMigas;
}

我这样做了,当我调用函数时,我看不到按钮。我给NetBeans的设计者按了一个按钮,得到了X和Y的位置。然后,在变量migaX和migaY中,我把X和Y放在同一个位置,所以按钮需要在同一个位置,但它不在那里

有人知道为什么吗?也许以这种方式放置位置是不正确的

谢谢你抽出时间

编辑:MigasDePan是我的JPanel


共 (2) 个答案

  1. # 1 楼答案

    下面是一个简单的例子,将JButton放在JPanel中,并将JPanel放在JFrame中。我没有使用任何GUI生成器就创建了这段代码

    1. 我在main方法中调用了SwingUtilities invokeLater方法,将Swing组件的创建和使用放在Event Dispatch thread上。Oracle和我坚持要在事件调度线程上启动每个Swing应用程序

    2. 我用的是JFrame。必须按照在run方法中调用JFrame方法的顺序调用它们

    3. 我用的是JPanel。我把JButt放在JPAND的中间,因为它是JPAND上唯一的组件。

    4. 我使用了Swing layout,边界布局。不同的Swing布局用于创建不同的Swing组件布局

    下面是简短的、自包含的、可运行的代码

    package com.ggl.testing;
    
    import java.awt.BorderLayout;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.SwingUtilities;
    
    public class MyButton implements Runnable {
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new MyButton());
        }
    
        @Override
        public void run() {
            JFrame frame = new JFrame("My Button");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(createMainPanel());
            frame.pack();
            frame.setVisible(true);
        }
    
        private JPanel createMainPanel() {
            JPanel panel = new JPanel();
            panel.setLayout(new BorderLayout());
    
            JButton myButton = new JButton("My Button");
            panel.add(myButton);
    
            return panel;
        }
    
    }
    
  2. # 2 楼答案

    默认情况下,组件的大小为(0,0),因此无需绘制任何内容

    当您向可见GUI动态添加按钮时,需要调用布局管理器,以便布局管理器可以确定组件的大小/位置

    基本准则是:

    panel.add(...);
    panel.revalidate();
    panel.repaint();