0

I m trying to create JLabels in a loop, but it seems that something is wrong. It don' t appear any label that is in the loop.What am i missing? Do i have to set another panel or i can use the same that i have?

 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) {
}
});
}
}
2
  • 1
    You haven't initialized the elements in the array, so they're all null, giving you the exception. This is a common mistake I see when beginners first start using arrays of objects. Commented Jul 28, 2013 at 20:03
  • 1) Use a consistent and logical indent for code blocks. The indentation of the code is intended to help people understand the program flow. 2) Java GUIs might have to work on a number of platforms, on different screen resolutions & using different PLAFs. As such they are not conducive to exact placement of components. To organize the components for a robust GUI, instead use layout managers, or combinations of them, along with layout padding & borders for white space. Commented Jul 29, 2013 at 2:48

1 Answer 1

5

you are getting NullPointerException because you haven't initialized the JLabel before calling setBounds method on it. So, Change this :

String name = file.getName();
labels[i].setBounds(10,v,80,20);

to:

String name = file.getName();
labels[i]= new JLabel();
labels[i].setBounds(10,v,80,20);

And to get rid of ArrayIndexOutOfBoundException change:

for (int i = 1 ;i <= c1; i++)

to:

for (int i = 0 ;i < c1; i++)

And, as a side note. Never use setBounds for positioning the components in swing. Use the appropriate layouts instead. There are lot of Layouts available with swing. Look at A Visual Guide to Layout Managers to know how to use these layouts.

Sign up to request clarification or add additional context in comments.

10 Comments

I ve change it as you said, but now i receive java.lang.ArrayIndexOutOfBoundsException:. Why? The c1=2
You are getting this exception because you are trying to access the element at that index which is not existing in the array. Any array starts with index 0 and ends with index lengh - 1. Look at my update.
You are right! Is it because of setBounds that i don't get the labels in my gui?
Then remove setbounds and dont change the layout of panel to null if you have done that.!!
Don't set the layout to null. Remove the following line from your code: panel.setLaout(null). If you don't set the layout null and then dont have setBounds then yes label in each loop will appear.
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.