按下按钮时,向框架添加多个标签

时间:2014-06-12 11:51:31

标签: java swing

按下按钮时,如何向框架添加多个标签。 我有一个带有一些控件的框架,我想在按下“但是”按钮时添加一些(“n” - 用户在“textField”中插入的数字)标签。

我的代码是:

public class SwingDemo extends JFrame
{
protected static final JLabel[] JLabel = null;
static JLabel filozof1;
static JTextArea rezultat;
static JTextField textField;
static JButton but;
static JFrame frame;
public void start()
{
    frame = new JFrame("Filozofi chinezi");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLayout(null);
    JLabel label = new JLabel("Numar folozofi :");
    label.setBounds(20, 20, 100, 20);
    filozof1=new JLabel();
    filozof1.setBounds(124, 50, 100, 20);
    rezultat=new JTextArea();
    rezultat.setBounds(50, 200, 700, 400);
    rezultat.setLineWrap(true);
    textField = new JTextField(2);
    textField.setBounds(124, 20, 100, 20);
    but=new JButton();
    but.setText("Start");
    but.setBounds(280, 20, 70, 20);
    frame.add(label);
    frame.add(filozof1);
    frame.add(rezultat);
    frame.add(textField);
    frame.add(but);
    frame.setSize(800,700);
    frame.setVisible(true);
}

public static void main(String args[])
{ 
    new SwingDemo().start();
    filozof1.setText("");
    rezultat.setText("");


    but.addActionListener(new ActionListener(){
                  public void actionPerformed( ActionEvent e){ 
                       Filozof[] F; int i; 
                       JLabel[] labels;
                       filozof1.setText("Button clicked");
                       n = Integer.parseInt(textField.getText());

                       labels= new JLabel[n];
                       for(i=0; i<n; i++) labels[i] = new JLabel("i");
                       for(i=0; i<n; i++) labels[i].setBounds(0, 0, 10, 10);
                       for(i=0; i<n; i++) labels.frame.add(eticheta[i]);}});
    }
}

2 个答案:

答案 0 :(得分:1)

这是您的代码的运行版本,但您不应使用NULL-Layout。 为什么所有变量都是static

import java.awt.event.*;
import javax.swing.*;

public class SwingDemo extends JFrame {

    private JLabel filozof1;
    private JTextArea rezultat;
    private JTextField textField;
    private JButton but;

    public SwingDemo() {
        super("Filozofi chinezi");
        start();
    }

    public void start() {
        setLayout(null);
        JLabel label = new JLabel("Numar folozofi :");
        label.setBounds(20, 20, 100, 20);
        add(label);
        filozof1 = new JLabel();
        filozof1.setBounds(124, 50, 100, 20);
        rezultat = new JTextArea();
        rezultat.setBounds(50, 200, 700, 400);
        rezultat.setLineWrap(true);
        textField = new JTextField(2);
        textField.setBounds(124, 20, 100, 20);

        but = new JButton("Start");
        but.setBounds(280, 20, 70, 20);

        but.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                for (int i = 1; i <= Integer.parseInt(textField.getText()); i++) {
                    rezultat.append(i + ". line\n");
                    // or
                    JLabel label = new JLabel(i + ". label");
                    label.setBounds(20 + (i * 25), 20 + (i * 25), 100, 20);
                    add(label);
                }
                revalidate();
                repaint();
            }
        });

        add(filozof1);
        add(rezultat);
        add(textField);
        add(but);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                JFrame frame = new SwingDemo();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.pack();
                frame.setSize(800, 700);
                frame.setVisible(true);
            }
        });
    }
}

答案 1 :(得分:0)

enter image description here

不要使用null布局。见下面的例子:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.Insets;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.border.EmptyBorder;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.JButton;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class AddLabel extends JFrame {

    private JPanel contentPane;
    private JTextField textField;
    JPanel panel_1;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    AddLabel frame = new AddLabel();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }


    public AddLabel() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);

        JPanel panel = new JPanel();
        contentPane.add(panel, BorderLayout.NORTH);

        JLabel lblNoOfLabels = new JLabel("Enter no of labels");

        textField = new JTextField();
        textField.setColumns(10);

        JButton btnAdd = new JButton("Add");
        GroupLayout gl_panel = new GroupLayout(panel);
        gl_panel.setHorizontalGroup(
            gl_panel.createParallelGroup(Alignment.LEADING)
                .addGroup(gl_panel.createSequentialGroup()
                    .addComponent(lblNoOfLabels)
                    .addPreferredGap(ComponentPlacement.RELATED)
                    .addComponent(textField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                    .addGap(32)
                    .addComponent(btnAdd)
                    .addContainerGap(157, Short.MAX_VALUE))
        );
        gl_panel.setVerticalGroup(
            gl_panel.createParallelGroup(Alignment.LEADING)
                .addGroup(Alignment.TRAILING, gl_panel.createSequentialGroup()
                    .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(gl_panel.createParallelGroup(Alignment.BASELINE)
                        .addComponent(lblNoOfLabels)
                        .addComponent(textField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                        .addComponent(btnAdd)))
        );
        panel.setLayout(gl_panel);


        panel_1 = new JPanel();
        JScrollPane jsp = new JScrollPane(panel_1);
        jsp.setPreferredSize(new Dimension(getWidth(), 60));
        contentPane.add(jsp, BorderLayout.CENTER);

        GridBagLayout gbl_panel = new GridBagLayout();
        gbl_panel.columnWidths = new int[]{0, 0, 0, 0};
        gbl_panel.rowHeights = new int[]{0, 0, 0, 0, 0, 0};
        gbl_panel.columnWeights = new double[]{0.0, 0.0, 1.0, Double.MIN_VALUE};
        gbl_panel.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};

        panel_1.setLayout(gbl_panel);        
        panel_1.setBackground(Color.white);

        btnAdd.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                if(!textField.getText().equals(""))
                    addlabels(Integer.parseInt(textField.getText()));
                panel_1.revalidate();


            }
        });
        pack();
    }
    public void addlabels(int num)
    {
        for(int i=0;i<num;i++)
        {
            panel_1.add(new JLabel("Label "+i),new GridBagConstraints( 1,  i,  1,  1, 
                    1, 0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0));

        }

    }
}