我正处于学习Java的早期阶段,目前正在研究GUI。
我希望能够制作一系列与文件夹中找到的每个文件相对应的按钮。例如,文件的名称可能出现在按钮内。在这个阶段,按钮DON&T; T需要做任何事情!
我设法制作了单独的程序,其中(a)生成文件夹中找到的文件名数组。 (b)使用for循环生成一组按钮。然而,我试图将两者结合起来是可笑的。我对OO 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);
}
}
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);
}
}
}
答案 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++;
}
}
}
...
它应该很简单,我没有测试过这个,但是非常相似的东西应该可行,如果不这样做的话。另外在我打字时添加了另一个答案,但是我的代码更接近你原来的帖子,所以我还是发布了。 :)