[英]multiple jlabels in a loop, java
我试图在一个循环中创建JLabels,但似乎出了点问题。 它没有出现在循环中的任何标签。我想念什么? 我需要设置另一个面板还是可以使用与我相同的面板?
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) {
}
});
}
}
您将收到NullPointerException
因为您尚未在调用JLabel
setBounds方法之前对其进行初始化。 因此,更改此:
String name = file.getName();
labels[i].setBounds(10,v,80,20);
至:
String name = file.getName();
labels[i]= new JLabel();
labels[i].setBounds(10,v,80,20);
并摆脱ArrayIndexOutOfBoundException
更改:
for (int i = 1 ;i <= c1; i++)
至:
for (int i = 0 ;i < c1; i++)
并且,作为旁注。 切勿使用setBounds
摆放组件。 请改用适当的布局。 秋千有很多可用的布局。 查看《布局管理器视觉指南》以了解如何使用这些布局。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.