运行java应用程序后创建并显示标签

运行java应用程序后创建并显示标签,java,swing,Java,Swing,我已经研究一个问题两天了,这对我来说将是一个头痛的问题! 我使用swing为我的应用程序创建GUI。我想在运行代码后通过单击按钮将标签添加到面板中,但我不能。请帮我解决这个问题。 这段代码大部分是由swing自动生成的,不是我写的代码 package javaapplication1; import java.awt.Color; import javax.swing.SwingConstants; import javax.swing.*; import java.awt.*; import

我已经研究一个问题两天了,这对我来说将是一个头痛的问题! 我使用swing为我的应用程序创建GUI。我想在运行代码后通过单击按钮将标签添加到面板中,但我不能。请帮我解决这个问题。 这段代码大部分是由swing自动生成的,不是我写的代码

package javaapplication1;

import java.awt.Color;
import javax.swing.SwingConstants;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.*;

public class RandomWordGUI extends javax.swing.JFrame {

/** Creates new form RandomWordGUI */
public RandomWordGUI() {
    initComponents();
}


/** This method is called from within the constructor to
 * initialize the form.
 * WARNING: Do NOT modify this code. The content of this method is
 * always regenerated by the Form Editor.
 */
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

    jPanel1 = new javax.swing.JPanel();
    jButton1 = new javax.swing.JButton();
    jLabel1 = new javax.swing.JLabel();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    jButton1.setText("jButton1");
    jButton1.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton1ActionPerformed(evt);
        }
    });

    jLabel1.setText("jLabel1");

    javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
    jPanel1.setLayout(jPanel1Layout);
    jPanel1Layout.setHorizontalGroup(
        jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(jPanel1Layout.createSequentialGroup()
            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanel1Layout.createSequentialGroup()
                    .addGap(155, 155, 155)
                    .addComponent(jButton1))
                .addGroup(jPanel1Layout.createSequentialGroup()
                    .addGap(172, 172, 172)
                    .addComponent(jLabel1)))
            .addContainerGap(172, Short.MAX_VALUE))
    );
    jPanel1Layout.setVerticalGroup(
        jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
            .addGap(70, 70, 70)
            .addComponent(jLabel1)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(jButton1)
            .addGap(91, 91, 91))
    );

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(jPanel1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
            .addContainerGap(186, Short.MAX_VALUE)
            .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 114, javax.swing.GroupLayout.PREFERRED_SIZE))
    );

    pack();
}// </editor-fold>

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         

    JLabel jLabel2 = new JLabel();
    jLabel2.setText("this is a label");
    this.jPanel1.add(jLabel2);
    this.jPanel1.repaint();
    this.jPanel1.revalidate();


}                                        

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {


        public void run() {
            new RandomWordGUI().setVisible(true);


        }
        RandomWordGUI randWord=new RandomWordGUI();



    });
}

// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
private javax.swing.JPanel jPanel1;
// End of variables declaration
PackageJavaApplication1;
导入java.awt.Color;
导入javax.swing.SwingConstants;
导入javax.swing.*;
导入java.awt.*;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.event.*;
公共类RandomWordGUI扩展了javax.swing.JFrame{
/**在WordGUI中创建新表单*/
公共WordGUI(){
初始化组件();
}
/**此方法从构造函数中调用,以
*初始化表单。
*警告:请勿修改此代码。此方法的内容为
*始终由表单编辑器重新生成。
*/
@抑制警告(“未选中”)
// 
私有组件(){
jPanel1=newjavax.swing.JPanel();
jButton1=newjavax.swing.JButton();
jLabel1=newjavax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setText(“jButton1”);
jButton1.addActionListener(新java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent evt){
jButton1ActionPerformed(evt);
}
});
jLabel1.setText(“jLabel1”);
javax.swing.GroupLayout jPanel1Layout=新的javax.swing.GroupLayout(jPanel1);
setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jpanellayout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jpanellayout.createSequentialGroup()
.addGap(155155155)
.addComponent(jButton1))
.addGroup(jpanellayout.createSequentialGroup()
.addGap(172172172)
.addComponent(jLabel1)))
.addContainerGap(172,简称最大值))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,jPanel1Layout.createSequentialGroup()
.addGap(70,70,70)
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,javax.swing.GroupLayout.DEFAULT\u SIZE,Short.MAX\u值)
.addComponent(jButton1)
.addGap(91,91,91))
);
javax.swing.GroupLayout=newjavax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(布局);
layout.setHorizontalGroup(
createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1、javax.swing.GroupLayout.Alignment.TRAILING、javax.swing.GroupLayout.DEFAULT\u SIZE、javax.swing.GroupLayout.DEFAULT\u SIZE、Short.MAX\u值)
);
layout.setVerticalGroup(
createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,layout.createSequentialGroup()
.addContainerGap(186,简称最大值)
.addComponent(jPanel1,javax.swing.GroupLayout.PREFERRED_SIZE,114,javax.swing.GroupLayout.PREFERRED_SIZE))
);
包装();
}// 
私有void jButton1ActionPerformed(java.awt.event.ActionEvent evt){
JLabel jLabel2=新的JLabel();
jLabel2.setText(“这是一个标签”);
this.jPanel1.add(jLabel2);
this.jPanel1.repaint();
this.jPanel1.revalidate();
}                                        
/**
*@param指定命令行参数
*/
公共静态void main(字符串参数[]){
invokeLater(new Runnable()){
公开募捐{
新建RandomWordGUI().setVisible(true);
}
RandomWordGUI randWord=新的RandomWordGUI();
});
}
//变量声明-不修改
私有javax.swing.JButton jButton1;
私有javax.swing.JLabel jLabel1;
私有javax.swing.JPanel jPanel1;
//变量结束声明

}

您正在尝试使用
GroupLayout
添加到面板中。如果可能的话,动态地添加到这一点是相当棘手的,我不建议这样做。我建议在窗格中添加一个helper
JPanel
,并向该helper面板添加任何新组件

编辑:

要清除使用的解决方案:使用表单编辑器添加了一个助手
JPanel
jPanel3
,在下面的代码中)。表单设计器默认对添加的面板也使用
GroupLayout
,这将导致与首先要解决的问题相同的问题,因此辅助面板的布局管理器更改为
FlowLayout
。操作代码最终非常简单,如下所示:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    JLabel jLabel2 = new JLabel();
    jLabel2.setText("this is a label");
    this.jPanel3.add(jLabel2);
    this.jPanel3.revalidate();
}

最后,我的朋友是代码。我们需要做的是

  • 在动态添加标签时,我们需要再次设置布局
  • 所以我们需要复制IDE创建的布局
  • 在水平组和垂直组中手动输入
.addComponent(jLabel2)

.addGap()

  • 您的位置位于屏幕底部,因此我建议您只需更改位置以获得更好的视图
  • 请注意间隙和定位
  • 只需在actionPerformed中粘贴代码,函数reming是相同的

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    
    JLabel jLabel2 = new JLabel();
    jLabel2.setText("this is a label");
    javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
    jPanel1.setLayout(jPanel1Layout);
    jPanel1Layout.setHorizontalGroup(
        jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(jPanel1Layout.createSequentialGroup()
            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanel1Layout.createSequentialGroup()
                    .addGap(155, 155, 155)
                    .addComponent(jButton1))
                .addGroup(jPanel1Layout.createSequentialGroup()
                    .addGap(172, 172, 172)
                    .addComponent(jLabel2)
                    .addGap(1,1,1)
                    .addComponent(jLabel1)))
            .addContainerGap(172, Short.MAX_VALUE))
    );
    jPanel1Layout.setVerticalGroup(
        jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
            .addGap(70, 70, 70)
            .addComponent(jLabel1)
            ***.addGap(1,1,1)
            .addComponent(jLabel2)***
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(jButton1)
            .addGap(91, 91, 91))
    );
    
    this.jPanel1.repaint();
    this.jPanel1.revalidate();
    
    }


我在窗口中输入了另一个面板——jPanel3——并将jLabel2添加到其中。。。然后在ActionEvent的内容中添加了此代码
jPanel3.setLayout(新的FlowLayout())

一切都好了……:)

谢谢我亲爱的朋友