循环中的多个JLabel,java
我试图在一个循环中创建jlabel,但似乎有些地方出了问题。循环中没有出现任何标签。我缺少什么?我是否必须设置另一个面板,或者我可以使用与现有面板相同的面板循环中的多个JLabel,java,java,swing,for-loop,nullpointerexception,jlabel,Java,Swing,For Loop,Nullpointerexception,Jlabel,我试图在一个循环中创建jlabel,但似乎有些地方出了问题。循环中没有出现任何标签。我缺少什么?我是否必须设置另一个面板,或者我可以使用与现有面板相同的面板 public class searchFrame extends JFrame { JLabel bsearch= new JLabel ("Search by name: "); JTextField txsearch = new JTextField(25); JButton bgo = new JButton("Go"); JLa
public class searchFrame extends JFrame {
JLabel bsearch= new JLabel ("Search by name: ");
JTextField txsearch = new JTextField(25);
JButton bgo = new JButton("Go");
JLabel allsearch= new JLabel ("All files");
JLabel result=new JLabel ();
JPanel panel = new JPanel();
searchFrame(){
super("Search frame");
setSize(260,400);
setLocation(500,280);
panel.setLayout (null);
bsearch.setBounds(10,40,100,20);
txsearch.setBounds(120,40,70,20);
bgo.setBounds(195,40,55,20);
allsearch.setBounds(10,70,80,20);
result.setBounds(10,100,80,20);
panel.add(bsearch);
panel.add(txsearch);
panel.add(bgo);
panel.add(allsearch);
panel.add(result);
getContentPane().add(panel);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
actionsearch();
mouseactionlabel();
}
public void actionsearch(){
bgo.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
String path1="C:/Documents and Settings/giannis/Desktop/Server/";
String fileName = "";
try{
fileName = txsearch.getText();
File directory = new File(path1);
File[] listOfFiles = directory.listFiles();
int c=0;
for (File file : listOfFiles ) {
String name = file.getName();
if (name.equals(fileName)) {
result.setText(fileName);
long size=file.length();
long modified=file.lastModified();
c=1;
System.out.println("File found..");
System.out.println("File size"+size);
System.out.println("File modified"+modified);
}
}if (c!=1){
System.out.println("File not found..");
result.setText("Not found");
}}
catch(Exception e){
e.printStackTrace();
}
}
});
}
void mouseactionlabel(){
allsearch.addMouseListener(new MouseListener() {
public void mouseClicked(MouseEvent arg0) {
String path1="C:/Documents and Settings/giannis/Desktop/Server/";
try{
File directory = new File(path1);
File[] listOfFiles = directory.listFiles();
int c1 = directory.listFiles().length;
System.out.println(c1);
JLabel[] labels = new JLabel[c1];
for (File file : listOfFiles ) {
for (int i = 0 ;i < c1; i++)
{
for(int v = 120; v <= 300; v += 20){
String name = file.getName();
labels[i] = new JLabel();
labels[i].setBounds(10,v,80,20);
labels[i].setText(name);
panel.add(labels[i]);
}}
}
}
catch(Exception e){
e.printStackTrace();
}
}
public void mouseEntered(MouseEvent arg0) {
}
public void mouseExited(MouseEvent arg0) {
}
public void mousePressed(MouseEvent arg0) {
}
public void mouseReleased(MouseEvent arg0) {
}
});
}
}
public类searchFrame扩展了JFrame{
JLabel bsearch=新的JLabel(“按名称搜索”);
JTextField txsearch=新的JTextField(25);
JButton bgo=新JButton(“Go”);
JLabel allsearch=新JLabel(“所有文件”);
JLabel结果=新的JLabel();
JPanel面板=新的JPanel();
searchFrame(){
超级(“搜索框”);
设置大小(260400);
设置位置(500280);
panel.setLayout(空);
b研究挫折(10,40100,20);
txsearch.setBounds(120,40,70,20);
bgo.setBounds(195,40,55,20);
allsearch.setBounds(10,70,80,20);
结果:挫折数(10100,80,20);
面板。添加(b搜索);
panel.add(txsearch);
面板。添加(bgo);
panel.add(allsearch);
添加(结果);
getContentPane().add(面板);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(真);
actionsearch();
mouseactionlabel();
}
public void actionsearch(){
bgo.addActionListener(新ActionListener(){
已执行的公共无效行动(行动事件ae){
String path1=“C:/Documents and Settings/giannis/Desktop/Server/”;
字符串fileName=“”;
试一试{
fileName=txsearch.getText();
文件目录=新文件(路径1);
文件[]listOfFiles=directory.listFiles();
int c=0;
对于(文件:listOfFiles){
字符串名称=file.getName();
if(name.equals(fileName)){
result.setText(文件名);
long size=file.length();
long modified=file.lastModified();
c=1;
System.out.println(“找到文件…”);
System.out.println(“文件大小”+大小);
System.out.println(“文件修改”+修改);
}
}如果(c!=1){
System.out.println(“未找到文件…”);
result.setText(“未找到”);
}}
捕获(例外e){
e、 printStackTrace();
}
}
});
}
void mouseactionlabel(){
allsearch.addMouseListener(新的MouseListener(){
公共无效鼠标单击(鼠标事件arg0){
String path1=“C:/Documents and Settings/giannis/Desktop/Server/”;
试一试{
文件目录=新文件(路径1);
文件[]listOfFiles=directory.listFiles();
int c1=directory.listFiles().length;
系统输出打印LN(c1);
JLabel[]标签=新的JLabel[c1];
对于(文件:listOfFiles){
对于(int i=0;i 对于(int v=120;v您将获得NullPointerException
,因为您在调用setBounds方法之前尚未初始化JLabel
。因此,
更改此项:
String name = file.getName();
labels[i].setBounds(10,v,80,20);
致:
要消除ArrayIndexOutOfBoundException
change:
for (int i = 1 ;i <= c1; i++)
for(int i=1;i您将获得NullPointerException
,因为您在调用setBounds方法之前尚未初始化JLabel
。因此,
更改此项:
String name = file.getName();
labels[i].setBounds(10,v,80,20);
致:
要消除ArrayIndexOutOfBoundException
change:
for (int i = 1 ;i <= c1; i++)
for(int i=1;i)您尚未初始化数组中的元素,因此它们都是null
,这是一个例外。这是初学者首次开始使用对象数组时常见的错误。1)对代码块使用一致的逻辑缩进。代码缩进旨在帮助人们理解程序流程。2)Java GUI可能必须在多个平台上工作,使用不同的屏幕分辨率和不同的PLAF。因此,它们不利于组件的精确放置。要组织组件以获得健壮的GUI,请使用布局管理器,或者与布局填充和边框一起使用。您尚未初始化数组中的元素,因此它们都是null
,这是一个例外。这是我在初学者第一次开始使用对象数组时看到的一个常见错误。1)对代码块使用一致的逻辑缩进。代码缩进旨在帮助人们理解程序流。2)Java GUI可能必须在多个平台上工作,在不同的屏幕分辨率和使用不同的PLAF。因此,它们不利于组件的精确放置。要组织组件以获得健壮的GUI,请使用布局管理器,或者使用布局填充和边框。正如您所说,我已经对其进行了更改,但现在我收到了java、 lang.ArrayIndexOutOfBoundsException:。为什么?c1=2之所以出现此异常,是因为您试图访问数组中不存在的索引处的元素。任何数组都以索引0
开始,以索引lengh-1
结束。请查看我的更新。您是对的!是因为有挫折,我才没有获得la我的gui中的BEL?然后删除设置框,如果已经这样做,则不要将面板布局更改为null
。!!不要将布局设置为null。从代码中删除以下行:panel.setLaout(null)
。如果您没有设置布局null
,然后没有设置边界,则每个循环中都会出现“是”标签。我已经按照您所说的进行了更改,但现在我收到了java.lang.ArrayIndexOutOfBoundsException:.为什么?c1=2您会出现此异常,因为您正在尝试访问arr中不存在的该索引处的元素任何数组都以索引0
开始,以索引结束