Java 为什么我的JLabel没有显示?
我是一个新的Java学习者 我正在创建一个GUI应用程序 此类从用户处获取一个数字,并在框架上显示一个表 当我运行我的类时,我输入一个数字并单击JButton,但是框架上的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
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;ifor)(int i=0;ifor)(int i=0;ifor)(int i=0;ifor(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);