【发布时间】:2015-01-30 00:16:57
【问题描述】:
我有一个位于 JScrollPane 中的 JList。该应用程序有一个按钮供用户浏览文件系统并选择一个类别来显示其文件和文件夹。
用户第一次单击按钮 JList 显示列表并允许用户从列表中选择,但如果用户第二次单击浏览按钮,则会显示新项目,但 他将无法再从列表中选择任何项目。
public class Main {
private JFrame frame;
final JFileChooser fc = new JFileChooser();
private JScrollPane scrollPane;
File directory;
JList<File> list;
private final Action action_1 = new SwingAction_1();
private final Action action_2 = new SwingAction_2();
JTextArea message;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Main window = new Main();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public Main() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.getContentPane().setBackground(Color.WHITE);
frame.setBounds(100, 100, 800, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
list = new JList<File>();
JButton btnBut1 = new JButton("Convert1");
btnBut1.setBounds(401, 6, 114, 29);
btnBut1.setAction(action_1);
JButton btnBut2 = new JButton("Convert2");
btnBut2.setBounds(523, 6, 117, 29);
btnBut2.setAction(action_2);
JButton btnChooseDirectory = new JButton("Choose Directory");
btnChooseDirectory.setBounds(59, 6, 153, 29);
btnChooseDirectory.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int returnVal = fc.showOpenDialog(fc);
if (returnVal == JFileChooser.APPROVE_OPTION) {
directory = fc.getSelectedFile();
File[] filesInDir = directory.getAbsoluteFile().listFiles();
addFilesToList(filesInDir);
}
}
});
frame.getContentPane().setLayout(null);
frame.getContentPane().add(btnChooseDirectory);
JLabel lblFilesMsg = new JLabel("List of files in the directory:");
lblFilesMsg.setBounds(6, 64, 175, 16);
frame.getContentPane().add(lblFilesMsg);
frame.getContentPane().add(btnBut1);
frame.getContentPane().add(btnBut2);
message = new JTextArea();
message.setBounds(6, 426, 788, 146);
message.setEditable(false);
message.setLineWrap(true);
frame.getContentPane().add(message);
frame.setTitle(APP_NAME);
}
private void addFilesToList(File[] filesInDir) {
list.setListData(filesInDir);
list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
list.setLayoutOrientation(JList.VERTICAL);
scrollPane = new JScrollPane(list);
scrollPane.setBounds(6, 81, 788, 330);
scrollPane.setBackground(Color.WHITE);
frame.getContentPane().add(scrollPane);
scrollPane.revalidate();
}
private class SwingAction_1 extends AbstractAction {
public SwingAction_1() {
putValue(NAME, "Converter1");
}
public void actionPerformed(ActionEvent e) {
MyAction1 act = new MyAction1();
act.method1(list.getSelectedValuesList());
}
}
private class SwingAction_2 extends AbstractAction {
public SwingAction_2() {
putValue(NAME, "Converter2");
}
public void actionPerformed(ActionEvent e) {
MyAction2 act = new MyAction2();
act.method2(list.getSelectedValuesList());
}
}
}
【问题讨论】:
-
btnChooseDirectory.setBounds(59, 6, 153, 29);-- 还在吗?我会再说一遍,就像我之前对你说过的那样——如果它会被忽略,为什么还要给出建议呢?接下来,您提供的代码似乎不足以确定您做错了什么。始终尝试发布mcve。 -
考虑提供一个runnable example 来证明您的问题。这将减少混乱并获得更好的响应
-
@HovercraftFullOfEels 我改变了这些,但现在需要解决功能问题。
-
@MadProgrammer 我会尽快更新问题。
-
然后发布一个问题,向我们展示您的功能问题。