Java 为什么我的JLabel没有显示?

Java 为什么我的JLabel没有显示?,java,swing,grid,jlabel,layout-manager,Java,Swing,Grid,Jlabel,Layout Manager,我是一个新的Java学习者 我正在创建一个GUI应用程序 此类从用户处获取一个数字,并在框架上显示一个表 当我运行我的类时,我输入一个数字并单击JButton,但是框架上的JLabel没有显示 它没有告诉我为什么不 import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; import java.awt.event.*; //th

我是一个新的Java学习者

我正在创建一个GUI应用程序

此类从用户处获取一个数字,并在框架上显示一个表

当我运行我的类时,我输入一个数字并单击JButton,但是框架上的JLabel没有显示

它没有告诉我为什么不

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import java.awt.event.*;
//this Frame class use the association   
class Frame {
    JFrame f;
    JButton jb,jbclear;
    JTextField jt;
    JLabel jl1[]=new JLabel[10];
    EventHandler hand=new EventHandler();
    //constructor
    Frame(){
        f=new JFrame("Hello");
        f.setSize(500,500);
        f.setLayout(null);

        JLabel jl=new JLabel("Enter the number");
        jl.setBounds(30,10,100,20);
        f.getContentPane().add(jl);

        jt=new JTextField();
        jt.setBounds(170,10,50,20);
        f.add(jt);

        jb=new JButton("Click");
        jb.setBounds(270,50,80,30);
        f.add(jb);
        jb.addActionListener(hand);

        jbclear=new JButton("Clear");
        jbclear.setBounds(270,90,80,30);
        f.add(jbclear);
        jbclear.addActionListener(hand);
        f.setVisible(true);


    }
    class EventHandler implements ActionListener{
        public void actionPerformed(ActionEvent e){
            if(e.getSource()==jb){
                 int num=Integer.parseInt((jt.getText()));
                    for(int i=0;i<10;i++){
                        int n=(num*i);
                        String s=String.valueOf(num)+" X "+i+" = "+n;
                       jl1[i]=new JLabel(s);
                    }
                    for(int i=0,k=80;i<10;i++){
                     jl1[i].setBounds(30,k,150,10);
                     f.add(jl1[i]);
                     jl1[i].setVisible(true);
                     k=k+30;
                    }

            }
            if(e.getSource()==jbclear){
                for(int i=0;i<10;i++){
                   jl1[i].setText("");
                }
            }

        }
    }






    public static void main(String [] args){
        new Frame();

    }

}
import javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JTextField;
导入java.awt.event.*;
//此框架类使用关联
类框架{
jf框架;
JButton jb,jbclear;
JTextField-jt;
JLabel jl1[]=新JLabel[10];
EventHandler hand=新的EventHandler();
//建造师
框架(){
f=新JFrame(“你好”);
f、 设置大小(500500);
f、 setLayout(空);
JLabel jl=新JLabel(“输入编号”);
jl.立根(30,10100,20);
f、 getContentPane().add(jl);
jt=新的JTextField();
jt.立根(170,10,50,20);
f、 添加(jt);
jb=新的jb按钮(“单击”);
jb.立根(270,50,80,30);
f、 添加(jb);
jb.addActionListener(手动);
jbclear=新的JButton(“Clear”);
jbclear.立根(270,90,80,30);
f、 添加(jbclear);
jbclear.addActionListener(手动);
f、 setVisible(真);
}
类EventHandler实现ActionListener{
已执行的公共无效操作(操作事件e){
如果(例如getSource()==jb){
intnum=Integer.parseInt((jt.getText());

对于(int i=0;i您可以创建标签
jl1[i]=新的JLabel
,但它们不会添加到容器中


不要使用空布局/setBounds(),但要选择一个合适的布局(例如
GridLayout
BoxLayout

您可以创建标签
jl1[i]=新的JLabel
,但它们不会添加到容器中


不要使用空布局/setBounds(),但要选择一个合适的布局(例如
GridLayout
BoxLayout

您可以创建标签
jl1[i]=新的JLabel
,但它们不会添加到容器中


不要使用空布局/setBounds(),但要选择一个合适的布局(例如
GridLayout
BoxLayout

您可以创建标签
jl1[i]=新的JLabel
,但它们不会添加到容器中

不要使用空布局/setBounds(),但要选择一个合适的布局(例如
GridLayout
BoxLayout

您的问题是:

1) 在同一个容器中添加所有组件,如
f.getContentPane().add()
,因为您使用
f.getContentPane().add()
f.add()
添加组件是不同的容器

2) 如果将组件添加到可见的框架/面板/容器中,则必须在添加后调用容器上的
revalidate()
repaint()
方法,因为没有这些方法,添加的组件将不可见。我在下一步中更改您的
ActionListener
(它可以执行您想要的操作):

类EventHandler实现ActionListener{
已执行的公共无效操作(操作事件e){
如果(例如getSource()==jb){
intnum=Integer.parseInt((jt.getText());
对于(int i=0;i,您的问题是下一个:

1) 在同一个容器中添加所有组件,如
f.getContentPane().add()
,因为您使用
f.getContentPane().add()
f.add()
添加组件是不同的容器

2) 如果将组件添加到可见的框架/面板/容器中,则必须在添加后调用容器上的
revalidate()
repaint()
方法,因为没有这些方法,添加的组件将不可见。我在下一步中更改您的
ActionListener
(它可以执行您想要的操作):

类EventHandler实现ActionListener{
已执行的公共无效操作(操作事件e){
如果(例如getSource()==jb){
intnum=Integer.parseInt((jt.getText());
对于(int i=0;i,您的问题是下一个:

1) 在同一个容器中添加所有组件,如
f.getContentPane().add()
,因为您使用
f.getContentPane().add()
f.add()
添加组件是不同的容器

2) 如果将组件添加到可见的框架/面板/容器中,则必须在添加后调用容器上的
revalidate()
repaint()
方法,因为没有这些方法,添加的组件将不可见。我在下一步中更改您的
ActionListener
(它可以执行您想要的操作):

类EventHandler实现ActionListener{
已执行的公共无效操作(操作事件e){
如果(例如getSource()==jb){
intnum=Integer.parseInt((jt.getText());
对于(int i=0;i,您的问题是下一个:

1) 在同一个容器中添加所有组件,如
f.getContentPane().add()
,因为您使用
f.getContentPane().add()
f.add()
添加组件是不同的容器

2) 如果将组件添加到可见的框架/面板/容器中,则必须在添加后调用容器上的
revalidate()
repaint()
方法,因为没有这些方法,添加的组件将不可见。我在下一步中更改您的
ActionListener
(它可以执行您想要的操作):

类EventHandler实现ActionListener{
已执行的公共无效操作(操作事件e){
如果(例如getSource()==jb){
intnum=Integer.parseInt((jt.getText());

对于(int i=0;i
for)(int i=0;i
for)(int i=0;i
for)(int i=0;i
for(int i=0;i
但它们没有添加到容器中。
:它们被添加到框架中,因此它们被添加到容器中。@Sage您是对的,它们被添加到框架中,但直接添加到框架中自java 6起就可以工作。以前的版本需要容器,所以最好定义容器并使用它。
但它们没有添加到容器中。 class EventHandler implements ActionListener{
    public void actionPerformed(ActionEvent e){
        if(e.getSource()==jb){
             int num=Integer.parseInt((jt.getText()));
                for(int i=0;i<10;i++){
                    int n=(num*i);
                    String s=String.valueOf(num)+" X "+i+" = "+n;
                   jl1[i]=new JLabel(s);
                }
                for(int i=0,k=80;i<10;i++){
                 jl1[i].setBounds(30,k,150,10);
                 f.getContentPane().add(jl1[i]);

                 k=k+30;
                }
                f.getContentPane().revalidate();
                f.getContentPane().repaint();

        }
        if(e.getSource()==jbclear){
            for(int i=0;i<10;i++){
             f.getContentPane().remove(jl1[i]);
            }
            f.getContentPane().revalidate();
            f.getContentPane().repaint();
        }

    }
}
             for(int i=0;i<10;i++){
                 int n=(num*i);
                 String s=String.valueOf(num)+" X "+i+" = "+n;
                 jl1[i]=new JLabel(s);
             }
             for(int i=0,k=80;i<10;i++){
                jl1[i].setBounds(30,k,150,10);
                f.add(jl1[i]);
                jl1[i].setVisible(true);