为目录中的每个文件创建JButton

时间:2013-02-21 08:37:32

标签: java swing file jbutton

我正处于学习Java的早期阶段,目前正在研究GUI。

我希望能够制作一系列与文件夹中找到的每个文件相对应的按钮。例如,文件的名称可能出现在按钮内。在这个阶段,按钮DON&T; T需要做任何事情!

我设法制作了单独的程序,其中(a)生成文件夹中找到的文件名数组。 (b)使用for循环生成一组按钮。然而,我试图将两者结合起来是可笑的。我对OO Java的了解并没有削减芥末。

有人可以告诉我如何继续吗?请保持简单!

ButtonGrid.java

import javax.swing.JFrame; 
import javax.swing.JButton; 
import java.awt.GridLayout;

public class ButtonGrid {

        JFrame frame=new JFrame(); 
        JButton[][] grid; 

        public ButtonGrid(int width, int length){ 
                frame.setLayout(new GridLayout(width,length)); 
                grid=new JButton[width][length]; 
                for(int y=0; y<length; y++){
                        for(int x=0; x<width; x++){
                                grid[x][y]=new JButton("("+x+","+y+")"); 
                                frame.add(grid[x][y]); 
                        }
                }
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.pack(); 
                frame.setVisible(true); 
        }
        public static void main(String[] args) {
                new ButtonGrid(3,3);
        }
}

ListFiles.Java

import java.io.File;

public class ListFiles 
{

 public static void main(String[] args) 
{

  String path = "."; 
   String files;
  File folder = new File(path);
  File[] listOfFiles = folder.listFiles(); 

  for (int i = 0; i < listOfFiles.length; i++) 
  {
   files = listOfFiles[i].getName();
          System.out.println(files);
   }
}
}

2 个答案:

答案 0 :(得分:1)

代码:

import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.io.File;
import javax.swing.JButton;

public class ListFiles
{
    public static void main(String[] args) {
        JFrame frame=new JFrame();
        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(2,5));
        String path = ".";
        String file;
        File folder = new File(path);
        File[] listOfFiles = folder.listFiles();

        for (int i = 0; i < listOfFiles.length; i++) {
            file = listOfFiles[i].getName();
            panel.add( new JButton( file ) );
        }
        frame.add( panel ) ;
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }
}

答案 1 :(得分:0)

将ListFiles.java主要方法的代码放入ButtonGrid.java的构造函数

public ButtonGrid(){ 

            File folder = new File(path);
            File[] listOfFiles = folder.listFiles();
            // about even width and height but this should be changed
            int width = (int)Math.ceil( Math.sqrt( listOfFiles.length ) );

            frame.setLayout(new GridLayout(width,width)); 
            grid=new JButton[width][width];

            int count = 0;
            for(int y=0; y < width; y++){
                    for(int x=0; x<width; x++){
                        if( count < listOfFiles.length ){
                            grid[x][y]=new JButton(listOfFiles[count].getName()); 
                            frame.add(grid[x][y]); 
                            count++;
                        }
                    }
            }
            ...

它应该很简单,我没有测试过这个,但是非常相似的东西应该可行,如果不这样做的话。另外在我打字时添加了另一个答案,但是我的代码更接近你原来的帖子,所以我还是发布了。 :)