1

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

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

我设法制作了单独的程序,这些程序 (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);
        }
}

列表文件.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);
   }
}
}
4

2 回答 2

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);
    }
}
于 2013-02-21T09:06:24.000 回答
0

将 ListFiles.java 的 main 方法中的代码放入 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++;
                        }
                    }
            }
            ...

它应该很简单,我还没有测试过,但如果没有,一些非常相似的东西应该可以工作。在我打字时还添加了另一个答案,但我的代码更接近您的原始帖子,所以我还是发布了。:)

于 2013-02-21T09:08:27.427 回答