我刚刚开始学习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++;
}
}
}
...
这应该很简单,我还没有测试过,但如果没有,类似的东西应该会起作用。另外,另一个答案是在我打字时添加的,但我的代码更接近你的原始帖子,所以我还是发布了。:)