在 JPanel 中插入按钮
Insert Button in JPanel
我在 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
下面是一个将 JButton 放入 JPanel 并将 JPanel 放入 JFrame 的简单示例。我在没有使用任何 GUI 构建器的情况下创建了这段代码。
我在main方法中调用了SwingUtilities invokeLater方法,将Swing组件的创建和使用放在了Event Dispatch thread上。 Oracle 和我坚持要在事件调度线程上启动每个 Swing 应用程序。
我用的是JFrame。您必须按照在 运行 方法中调用 JFrame 方法的顺序调用它们。
我用的是JPanel。我将 JButton 放在 JPanel 的中间,因为它是 JPanel 上唯一的组件。
我用了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;
}
}
默认情况下,组件的大小为 (0, 0),因此没有可绘制的内容。
当您将按钮动态添加到可见 GUI 时,您需要调用布局管理器,以便组件 size/location 可以由布局管理器确定。
基本代码为:
panel.add(...);
panel.revalidate();
panel.repaint();
我在 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
下面是一个将 JButton 放入 JPanel 并将 JPanel 放入 JFrame 的简单示例。我在没有使用任何 GUI 构建器的情况下创建了这段代码。
我在main方法中调用了SwingUtilities invokeLater方法,将Swing组件的创建和使用放在了Event Dispatch thread上。 Oracle 和我坚持要在事件调度线程上启动每个 Swing 应用程序。
我用的是JFrame。您必须按照在 运行 方法中调用 JFrame 方法的顺序调用它们。
我用的是JPanel。我将 JButton 放在 JPanel 的中间,因为它是 JPanel 上唯一的组件。
我用了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;
}
}
默认情况下,组件的大小为 (0, 0),因此没有可绘制的内容。
当您将按钮动态添加到可见 GUI 时,您需要调用布局管理器,以便组件 size/location 可以由布局管理器确定。
基本代码为:
panel.add(...);
panel.revalidate();
panel.repaint();