运行java应用程序后创建并显示标签
我已经研究一个问题两天了,这对我来说将是一个头痛的问题! 我使用swing为我的应用程序创建GUI。我想在运行代码后通过单击按钮将标签添加到面板中,但我不能。请帮我解决这个问题。 这段代码大部分是由swing自动生成的,不是我写的代码运行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
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
添加到面板中。如果可能的话,动态地添加到这一点是相当棘手的,我不建议这样做。我建议在窗格中添加一个helperJPanel
,并向该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创建的布局
- 在水平组和垂直组中手动输入
- 您的位置位于屏幕底部,因此我建议您只需更改位置以获得更好的视图
- 请注意间隙和定位
- 只需在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.setLayout(新的FlowLayout())代码>
一切都好了……:)
谢谢我亲爱的朋友