gpt4 book ai didi

java - 将 JList 与模型一起使用?

转载 作者:行者123 更新时间:2023-11-29 05:52:42 25 4
gpt4 key购买 nike

我正在制作一个允许您添加文件然后压缩它们的应用程序,但是如何从我的硬盘驱动器或与此相关的任何硬盘驱动器中获取文件到我的应用程序中?我可以通过文件阅读器获取文件,但如何将其放入我的 GUI 中?

我读到 defaultListModel 是可行的方法,但我不确定。

public class LockNCompressWindow
{
public static void main(String[] args)
{
LockFrame w = new LockFrame();
w.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
w.setSize(500,500);
w.setResizable(false);
w.setVisible(true);
}
}

class LockFrame extends JFrame implements ActionListener
{
//Declaring MenuBar and components
JMenuBar menuBar = new JMenuBar();
JMenu menu = new JMenu("File");
JMenuItem MenuItemClose = new JMenuItem("Close");

//Declaring Panels
JPanel PanelNorth = new JPanel();
JPanel PanelCenter = new JPanel();
JPanel PanelSouth = new JPanel();

//Declaring Buttons
JButton ButtonAddFile = new JButton("Add File");
JButton ButtonDeleteFile = new JButton("Delete File");
JButton ButtonLock = new JButton("Lock");
JButton ButtonUnlock = new JButton("Unlock");

//Declaring FileChooser
JFileChooser chooser = new JFileChooser();

public LockFrame()
{
//Title of the frame
super("Lock and Zip");

//Creating Menu bar
super.setJMenuBar(menuBar);

//Creating the Menu Tab
menuBar.add(menu);

//Creating a Menu Item
menu.add(MenuItemClose);

//Adding North Panel
PanelNorth.setBorder(BorderFactory.createEtchedBorder());

super.add(PanelNorth);

PanelNorth.add(ButtonAddFile);
PanelNorth.add(ButtonDeleteFile);
add(PanelNorth,BorderLayout.NORTH);

//Adding Center Panel to Frame
super.add(PanelCenter);

//Adding Scroll Pane
JScrollPane listScroller = new JScrollPane();
listScroller.setPreferredSize(new Dimension(400,360));

PanelCenter.add(listScroller);
add(PanelCenter, BorderLayout.CENTER);

//Adding South Panel
PanelSouth.setBorder(BorderFactory.createEtchedBorder());

super.add(PanelCenter);

PanelSouth.add(ButtonLock);
PanelSouth.add(ButtonUnlock);
PanelSouth.add(ButtonPassword);
add(PanelSouth,BorderLayout.SOUTH);

//Action Listeners
ButtonAddFile.addActionListener(this);
ButtonPassword.addActionListener(this);
}

public void actionPerformed(ActionEvent e)
{
Object Source = e.getSource();
int ReturnValue;

if (Source == ButtonAddFile)
{
ReturnValue = chooser.showOpenDialog(LockFrame.this);
if (ReturnValue == JFileChooser.APPROVE_OPTION())
{
File file = chooser.getSelectedFile();
//Add the file to you center panel
}
}

if (Source == ButtonDeleteFile)
{

}

if (Source == ButtonLock)
{

}

if (Source == ButtonUnlock)
{

}

if (Source == ButtonPassword)
{

}
}
}

最佳答案

您可能想阅读 How to user Lists了解更多细节,但基本概念相当简单。

为您自己创建一个 ListModel。在此示例中,我自定义了自己的内容,您可以轻松地使用 DefaultListModel,并向其中添加您想要的对象。

为自己创建一个 JList 并将您的模型应用于它,好吧,就是这样......

public class FileAdder {

public static void main(String[] args) {
new FileAdder();
}

public FileAdder() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException ex) {
} catch (InstantiationException ex) {
} catch (IllegalAccessException ex) {
} catch (UnsupportedLookAndFeelException ex) {
}

JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new FileAdderPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}

public class FileAdderPane extends JPanel {

private JList fileList;
private JFileChooser chooser;

public FileAdderPane() {
setLayout(new BorderLayout());

fileList = new JList(new MyFileListModel());
JButton addMore = new JButton("Add More");
addMore.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (chooser == null) {
chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
chooser.setMultiSelectionEnabled(true);
}
switch (chooser.showOpenDialog(FileAdderPane.this)) {
case JFileChooser.APPROVE_OPTION:
File[] files = chooser.getSelectedFiles();
if (files != null && files.length > 0) {
MyFileListModel model = (MyFileListModel) fileList.getModel();
for (File file : files) {
model.add(file);
}
}
break;
}
}
});

add(new JScrollPane(fileList));
add(addMore, BorderLayout.SOUTH);
}
}

public class MyFileListModel extends AbstractListModel {

private List<File> files = new ArrayList<File>(25);

@Override
public int getSize() {
return files.size();
}

@Override
public Object getElementAt(int index) {
return files.get(index);
}

public void add(File file) {
files.add(file);
fireIntervalAdded(this, files.size() - 1, files.size() - 1);
}

public void remove(File file) {
int index = files.indexOf(file);
files.remove(file);
fireIntervalRemoved(this, index, index);
}
}
}

关于java - 将 JList 与模型一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13316294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com