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);
}
}
}