Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 根据阵列创建对象_Java_Swing - Fatal编程技术网

Java 根据阵列创建对象

Java 根据阵列创建对象,java,swing,Java,Swing,我有一个数组,其中包含另一个目录中的目录数量。然而,我的问题是我必须为每个文件夹创建一个JPanel 例如: File folder = new File("..."); File[] listOfFiles = folder.listFiles(); <- this contains the folders ({"folder1","folder2","folder3",...}). 文件夹=新文件(“…”); File[]listOfFiles=folder.listFiles()

我有一个数组,其中包含另一个目录中的目录数量。然而,我的问题是我必须为每个文件夹创建一个
JPanel

例如:

File folder = new File("...");
File[] listOfFiles = folder.listFiles(); <- this contains the folders ({"folder1","folder2","folder3",...}).
文件夹=新文件(“…”);

File[]listOfFiles=folder.listFiles() 您可以这样做(我使用
MigLayout
提供的布局制作,但可以更改)

import javax.swing.*;
导入java.awt.*;
导入net.miginfocom.swing.MigLayout;
导入java.io.*;
导入java.util.ArrayList;
导入java.awt.event.*;
导入javax.swing.event.*;
导入javax.swing.JTabbedPane;
公共类SimpleGUI
{
公共JFrame myMainWindow=新JFrame(“多目录”);
JPanel[]guiPanelS=新的JPanel[1000];
JScrollPane[]guiJSP=newjscrollpane[1000];
public JTabbedPane tabbedPane=新JTabbedPane();
int-pI=0;
String mainDirectory=“C:/Users/Daniel/Dropbox/Programming/Code/Notepad++/Java/Stack Overflow”;
字符串mainDirectoryName=新文件(mainDirectory).getName();
int indentForMainPanel=30;
字符串parseIndent=Integer.toString(indentForMainPanel);
字符串lastDirOpen=mainDirectory;
字符串lastdireopenbut=mainDirectory;
ArrayList directoriesList=新的ArrayList();
公营机构
{
myMainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(新的GridLayout(1,1));
listFilesHD(新文件(mainDirectory),mainDirectoryName);
最终布尔值showTabsHeader=false;
setUI(新的javax.swing.plaf.basic.BasicTabbedPaneUI()
{
@凌驾
受保护的int-CalculateBareahHeight(int-tabPlacement、int-horizRunCount、int-maxTabHeight)
{
if(showTabsHeader)
{
返回super.calculateBareahHeight(tabPlacement、horizRunCount、maxTabHeight);
}
其他的
{
返回0;
}
}
受保护的void paintTabArea(图形g、int tabPlacement、int selectedIndex){}
});
myMainWindow.getContentPane().add(选项卡窗格);
tabbedPane.addChangeListener(新的CustomChangeListener());
myMainWindow.setVisible(true);
myMainWindow.setBounds(10,10500500);
}
public void listFilesHD(文件f,字符串dName)
{
MigLayout=新的MigLayout(“包裹”、“增长”);
guiPanelS[pI]=新的JPanel(布局);
guiJSP[pI]=新的JScrollPane(guiPanelS[pI]);
JLabel currentDir=新的JLabel(“当前目录:+dName”);
guiPanelS[pI].add(currentDir,“对齐中心”);
JLabel DirectoryName=新的JLabel(dName);
DirectoryName.setForeground(颜色为蓝色);
guiPanelS[pI].add(DirectoryName);
File[]listOfFiles=f.listFiles();
JLabel[]listsValues=新的JLabel[listOfFiles.length];
JButton[]tabSwitch=newjbutton[listOfFiles.length];
int i=0;
int i2=0;
对于(文件fileTemp:listOfFiles)
{
listsValues[i]=newjlabel(listOfFiles[i].getName());
if(listOfFiles[i].isDirectory())
{
directoriesList.add(文件列表[i]);
tabSwitch[i2]=newjbutton(listOfFiles[i].getName());
tabSwitch[i2].setOpaque(false);//这些将删除按钮填充和边框
tabSwitch[i2]。setContentAreaFilled(false);
tabSwitch[i2].setboorder(空);
tabSwitch[i2].setFocusable(false);
tabSwitch[i2]。设置前景(颜色:红色);
tabSwitch[i2].addActionListener(新建openNewPaneActionListener());
guiPanelS[pI].add(tabSwitch[i2],“gapLeft 30”);
i2++;
}
else if(listOfFiles[i].isFile())
{
guiPanelS[pI].add(listsValues[i],“gapLeft 30”);
}
i++;
}
addTab(f.getAbsolutePath(),guiJSP[pI]);
guiJSP[pI].getVerticalScrollBar().setUnitIncrement(16);
pI++;
}
public void listFilesSubD(文件f、字符串dName、字符串dPath、字符串homeditory)
{
MigLayout=新的MigLayout(“包裹”、“增长”);
guiPanelS[pI]=新的JPanel(布局);
guiJSP[pI]=新的JScrollPane(guiPanelS[pI]);
JLabel currentDir=新的JLabel(“当前目录:+dName”);
guiPanelS[pI].add(currentDir,“对齐中心”);
JButton homeDirectoryName=新JButton(homeDirectory);
homeDirectoryName.setForeground(颜色:蓝色);
addActionListener(新的backListener());
setOpaque(false);//这些将删除按钮填充和边框
homeDirectoryName.setContentAreaFilled(false);
homeDirectoryName.setBorder(空);
homeDirectoryName.setFocusable(false);
guiPanelS[pI].add(homeDirectoryName);
如果(!new File(lastdireopenbut).getName().equals(mainDirectoryName))
{
JButton lastDirectoryName=newjbutton(新文件(lastdireopenbut).getName());
lastDirectoryName.setForeground(颜色为绿色);
addActionListener(新的upOneListener());
lastDirectoryName.set不透明(false);
lastDirectoryName.setContentAreaFilled(false);
lastDirectoryName.setBorder(空);
lastDirectoryName.setFocusable(false);
guiPanelS[pI].add(lastDirectoryName,“gapLeft 30”);
File[]listOfFiles=f.listFiles();
JLabel[]listsValues=新的JLabel[listOfFiles.length];
JButton[]tabSwitch=newjbutton[listOfFiles.length];
int i=0;
int i2=0;
对于(文件fileTemp:listOfFiles)
{
listsValues[i]=newjlabel(listOfFiles[i].getName());
if(listOfFiles[i].isDirectory())
{
经理
SystemAPI sapi = new SystemAPI(); <- custom written API  
File folder = new File(sapi.getHomeDir+"\\Documents\\*programname*\\default");  
File[] listOfFiles = folder.listFiles();

    try{
        for (int i = 0; i < listOfFiles.length; i++) {
            if (listOfFiles[i].isFile()) {
                System.out.println(listOfFiles[i].getName());
            } else if (listOfFiles[i].isDirectory()) {
                System.out.println(listOfFiles[i].getName());
            }
        }   
    }catch(Exception a){
        JOptionPane.showMessageDialog(null, "Error Occurred", "Error Dialog", JOptionPane.ERROR_MESSAGE);
    }
import javax.swing.*;
import java.awt.*;
import net.miginfocom.swing.MigLayout;
import java.io.*;
import java.util.ArrayList;
import java.awt.event.*;
import javax.swing.event.*;
import javax.swing.JTabbedPane;

public class SimpleGUI
{
    public JFrame myMainWindow = new JFrame("Multtiple directories");

    JPanel[] guiPanelS = new JPanel[1000];
    JScrollPane[] guiJSP = new JScrollPane[1000];
    public JTabbedPane tabbedPane = new JTabbedPane();
    int pI = 0;
    String mainDirectory = "C:/Users/Daniel/Dropbox/Programming/Code/Notepad++/Java/Stack Overflow";
    String mainDirectoryName = new File(mainDirectory).getName();
    int indentForMainPanel = 30;
    String parseIndent = Integer.toString(indentForMainPanel);
    String lastDirOpen = mainDirectory;
    String lastDirOpenBut = mainDirectory;
    ArrayList<File> directoriesList = new ArrayList<File>();

    public void runGUI()
    {
        myMainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        myMainWindow.setLayout(new GridLayout(1,1));

        listFilesHD(new File(mainDirectory),mainDirectoryName);

        final boolean showTabsHeader = false;
        tabbedPane.setUI(new javax.swing.plaf.basic.BasicTabbedPaneUI()
        {
            @Override
            protected int calculateTabAreaHeight(int tabPlacement, int horizRunCount, int maxTabHeight)
            {
                if(showTabsHeader)
                {
                    return super.calculateTabAreaHeight(tabPlacement, horizRunCount, maxTabHeight);
                }
                else
                {
                    return 0;
                }
            }
            protected void paintTabArea(Graphics g,int tabPlacement,int selectedIndex){}
        });

        myMainWindow.getContentPane().add(tabbedPane);
        tabbedPane.addChangeListener(new CustomChangeListener());

        myMainWindow.setVisible(true);
        myMainWindow.setBounds(10,10,500,500);
    }

    public void listFilesHD(File f,String dName)
    {
        MigLayout layout = new MigLayout("wrap", "[grow]");
        guiPanelS[pI] = new JPanel(layout);
        guiJSP[pI] = new JScrollPane(guiPanelS[pI]);
        JLabel currentDir = new JLabel("Current Directory: "+dName);
        guiPanelS[pI].add(currentDir,"align center");
        JLabel DirectoryName = new JLabel(dName);
        DirectoryName.setForeground(Color.BLUE);
        guiPanelS[pI].add(DirectoryName);
        File[] listOfFiles = f.listFiles();

        JLabel[] listsValues = new JLabel[listOfFiles.length];
        JButton[] tabSwitch = new JButton[listOfFiles.length];

        int i=0;
        int i2=0;
        for(File fileTemp:listOfFiles)
        {
            listsValues[i] = new JLabel(listOfFiles[i].getName());
            if(listOfFiles[i].isDirectory())
            {
                directoriesList.add(listOfFiles[i]);
                tabSwitch[i2] = new JButton(listOfFiles[i].getName());
                tabSwitch[i2].setOpaque(false); //These remove the button filling and border
                tabSwitch[i2].setContentAreaFilled(false);
                tabSwitch[i2].setBorder(null);
                tabSwitch[i2].setFocusable(false);
                tabSwitch[i2].setForeground(Color.RED);
                tabSwitch[i2].addActionListener(new openNewPaneActionListener());
                guiPanelS[pI].add(tabSwitch[i2],"gapLeft 30");
                i2++;
            }
            else if(listOfFiles[i].isFile())
            {
                guiPanelS[pI].add(listsValues[i],"gapLeft 30");
            }

            i++;
        }

        tabbedPane.addTab(f.getAbsolutePath(),guiJSP[pI]);
        guiJSP[pI].getVerticalScrollBar().setUnitIncrement(16);
        pI++;
    }

    public void listFilesSubD(File f,String dName,String dPath, String homeDirectory)
    {
        MigLayout layout = new MigLayout("wrap", "[grow]");
        guiPanelS[pI] = new JPanel(layout);
        guiJSP[pI] = new JScrollPane(guiPanelS[pI]);
        JLabel currentDir = new JLabel("Current Directory: "+dName);
        guiPanelS[pI].add(currentDir,"align center");
        JButton homeDirectoryName = new JButton(homeDirectory);
        homeDirectoryName.setForeground(Color.BLUE);
        homeDirectoryName.addActionListener(new backListener());
        homeDirectoryName.setOpaque(false); //These remove the button filling and border
        homeDirectoryName.setContentAreaFilled(false);
        homeDirectoryName.setBorder(null);
        homeDirectoryName.setFocusable(false);
        guiPanelS[pI].add(homeDirectoryName);

        if(!new File(lastDirOpenBut).getName().equals(mainDirectoryName))
        {
            JButton lastDirectoryName = new JButton(new File(lastDirOpenBut).getName());
            lastDirectoryName.setForeground(Color.GREEN);
            lastDirectoryName.addActionListener(new upOneListener());
            lastDirectoryName.setOpaque(false);
            lastDirectoryName.setContentAreaFilled(false);
            lastDirectoryName.setBorder(null);
            lastDirectoryName.setFocusable(false);
            guiPanelS[pI].add(lastDirectoryName,"gapLeft 30");

            File[] listOfFiles = f.listFiles();

            JLabel[] listsValues = new JLabel[listOfFiles.length];
            JButton[] tabSwitch = new JButton[listOfFiles.length];

            int i=0;
            int i2=0;
            for(File fileTemp:listOfFiles)
            {
                listsValues[i] = new JLabel(listOfFiles[i].getName());
                if(listOfFiles[i].isDirectory())
                {
                    directoriesList.add(listOfFiles[i]);
                    tabSwitch[i2] = new JButton(listOfFiles[i].getName());
                    tabSwitch[i2].setOpaque(false);
                    tabSwitch[i2].setContentAreaFilled(false);
                    tabSwitch[i2].setBorder(null);
                    tabSwitch[i2].setFocusable(false);
                    tabSwitch[i2].setForeground(Color.RED);
                    tabSwitch[i2].addActionListener(new openNewPaneActionListener());
                    guiPanelS[pI].add(tabSwitch[i2],"gapLeft 60");
                    i2++;
                }
                else if(listOfFiles[i].isFile())
                {
                    guiPanelS[pI].add(listsValues[i],"gapLeft 60");
                }
                i++;
            }
        }
        else
        {
            File[] listOfFiles = f.listFiles();

            JLabel[] listsValues = new JLabel[listOfFiles.length];
            JButton[] tabSwitch = new JButton[listOfFiles.length];

            int i=0;
            int i2=0;
            for(File fileTemp:listOfFiles)
            {
                listsValues[i] = new JLabel(listOfFiles[i].getName());
                if(listOfFiles[i].isDirectory())
                {
                    directoriesList.add(listOfFiles[i]);
                    tabSwitch[i2] = new JButton(listOfFiles[i].getName());
                    tabSwitch[i2].setOpaque(false); //These remove the button filling and border
                    tabSwitch[i2].setContentAreaFilled(false);
                    tabSwitch[i2].setBorder(null);
                    tabSwitch[i2].setFocusable(false);
                    tabSwitch[i2].setForeground(Color.RED);
                    tabSwitch[i2].addActionListener(new openNewPaneActionListener());
                    guiPanelS[pI].add(tabSwitch[i2],"gapLeft 30");
                    i2++;
                }
                else if(listOfFiles[i].isFile())
                {
                    guiPanelS[pI].add(listsValues[i],"gapLeft 30");
                }
                i++;
            }
        }

        if(tabbedPane.indexOfTab(dPath)==-1)
        {
            tabbedPane.addTab(dPath,guiJSP[pI]);
        }

        guiJSP[pI].getVerticalScrollBar().setUnitIncrement(16);
        pI++;
    }

    public static void main(String[] args)
    {
        SimpleGUI sG = new SimpleGUI();
        sG.runGUI();
    }

    class openNewPaneActionListener implements ActionListener
    {
        @Override
        public void actionPerformed(ActionEvent e)
        {
            lastDirOpenBut = tabbedPane.getTitleAt(tabbedPane.getSelectedIndex());
            String butSrcTxt = "";
            Object source = e.getSource();
            if (source instanceof JButton) 
            {
                JButton btn = (JButton)source;
                butSrcTxt = btn.getText();
            }

            boolean tF = false;
            File fMain = new File("");
            for(File f:directoriesList)
            {
                if(f.getName().equals(butSrcTxt))
                {
                    fMain = f;
                    tF = true;
                }
            }

            if(tF)
            {
                if(tabbedPane.indexOfTab(fMain.getAbsolutePath())==-1)
                {
                    listFilesSubD(fMain, butSrcTxt, fMain.getAbsolutePath(),mainDirectoryName);
                }

                tabbedPane.setSelectedIndex(tabbedPane.indexOfTab(fMain.getAbsolutePath()));
            }

        }
    }

    class upOneListener implements ActionListener
    {
        @Override
        public void actionPerformed(ActionEvent e)
        {
            tabbedPane.setSelectedIndex(tabbedPane.indexOfTab(lastDirOpen));
        }
    }

    class CustomChangeListener implements ChangeListener
    {
        @Override
        public void stateChanged(ChangeEvent e)
        {
            lastDirOpen = tabbedPane.getTitleAt(tabbedPane.getSelectedIndex());
            int endIndex = lastDirOpen.lastIndexOf(Character.toString((char) 92));
            if (endIndex != -1)
            {
                lastDirOpen = lastDirOpen.substring(0, endIndex);
            }
        }
    }

    class backListener implements ActionListener
    {
        @Override
        public void actionPerformed(ActionEvent e)
        {
            tabbedPane.setSelectedIndex(0);
        }
    } 
}