为目录中的每个文件制作JButtons



我刚刚开始学习Java,目前正在研究GUI。

我希望能够制作一系列对应于文件夹中每个文件的按钮。例如,文件的名称可以显示在按钮内。在这个阶段,按钮不需要做任何事情!

我已经设法制作了单独的程序,(a)生成文件夹中的一组文件名。(b) 使用for循环生成一组按钮。然而,我把两者结合起来的尝试却很可笑。我对OO Java的了解还不够。

有人能告诉我如何进行吗?请保持简单!

按钮网格.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);
   }
}
}

代码:

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);
    }
}

将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++;
                        }
                    }
            }
            ...

这应该很简单,我还没有测试过,但如果没有,类似的东西应该会起作用。另外,另一个答案是在我打字时添加的,但我的代码更接近你的原始帖子,所以我还是发布了。:)

相关内容

  • 没有找到相关文章

最新更新