1

私は Java を学び始めたばかりで、現在 GUI を検討しています。

フォルダ内の各ファイルに対応する一連のボタンを作成できるようにしたいと考えています。たとえば、ファイルの名前をボタン内に表示できます。この段階では、ボタンは何もする必要はありません!

(a) フォルダ内にあるファイル名の配列を生成する別のプログラムを作成することができました。(b) for ループを使用して一連のボタンを生成します。しかし、この 2 つを組み合わせようとする私の試みは笑えるものでした。オブジェクト指向 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);
   }
}
}
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 のメイン メソッドのコードを 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 に答える