Java 将JFileChooser嵌入到另一个组件中

Java 将JFileChooser嵌入到另一个组件中,java,jlist,jfilechooser,Java,Jlist,Jfilechooser,我的意图是将JFileChooser嵌入到其他组件中,例如,可以选择一个文件并单击“添加”按钮,以便将该文件添加到JList中(在运行时)。我以以下形式创建了一个示例GUI: 我无法在JFileChooser和JList之间创建链接。有人能帮忙吗 您还可以看到我尝试过的内容: public Converter() { setForeground(Color.BLACK); getContentPane().setLayout(null); textFi

我的意图是将JFileChooser嵌入到其他组件中,例如,可以选择一个文件并单击“添加”按钮,以便将该文件添加到JList中(在运行时)。我以以下形式创建了一个示例GUI:

我无法在JFileChooser和JList之间创建链接。有人能帮忙吗

您还可以看到我尝试过的内容:

        public Converter() {
    setForeground(Color.BLACK);
    getContentPane().setLayout(null);

    textField = new JTextField();
    textField.setBounds(20, 12, 714, 20);
    getContentPane().add(textField);
    textField.setColumns(10);

    final JScrollPane scrollPane = new JScrollPane();
    setTitle("ABC"); 
    scrollPane.setBounds(0, 470, 766, -438);
    getContentPane().add(scrollPane);

    list = new JList();
    list.setBackground(Color.LIGHT_GRAY);
    list.setForeground(Color.GRAY);

    vector = new Vector<File>();
    field = new JTextField();

    final JFileChooser fileChooser = new JFileChooser();
    fileChooser.setBounds(10, 43, 485, 463);
    getContentPane().add(fileChooser);


    list = new JList(vector);
    list.setBackground(Color.LIGHT_GRAY);

    JButton btnNewButton = new JButton("ADD");
    btnNewButton.setBounds(505, 106, 89, 23);
    btnNewButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
              add();
        }

        private void add() {
            // TODO Auto-generated method stub

              {
                  for (File file : fileChooser.getSelectedFiles()) {
                        field.setText(file.getAbsolutePath());
                        vector.add(file);
                        System.out.println("Added..!!");
                }
                //list.updateUI();
              }
            }
    });
    getContentPane().add(btnNewButton);


    JButton btnNewButton_1 = new JButton("REMOVE");
    btnNewButton_1.setBounds(505, 190, 89, 23);
    btnNewButton_1.addActionListener(new ActionListener() {
               public void actionPerformed(ActionEvent e) {
               remove();
               }

        private void remove() {
            if(list.getSelectedIndices().length > 0) {
                  int[] selectedIndices = list.getSelectedIndices();
                  for (int i = selectedIndices.length-1; i >=0; i--) {
                        vector.removeElementAt(i);
                        System.out.println("Removed..!!");
                  } 
                   }
                    list.updateUI();

        }   
        });
    getContentPane().add(btnNewButton_1);

    JButton btnNewButton_2 = new JButton("DECODE");
    btnNewButton_2.setBounds(505, 278, 89, 23);

    getContentPane().add(btnNewButton_2);

    JList list_1 = new JList();
    list_1.setForeground(Color.BLACK);
    list_1.setBackground(Color.LIGHT_GRAY);
    list_1.setBounds(604, 109, 162, 328);
    getContentPane().add(list_1);

    final JFrame Jframe = new JFrame();
    Jframe.setFont(new Font("Arial", Font.BOLD, 14));
    Jframe.setForeground(Color.WHITE);
    Jframe.setTitle("Additional Loader Information");
    Jframe.getContentPane().setLayout(null);

}       

static class PreviewPane extends JPanel implements PropertyChangeListener {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private JLabel label;
    private int maxImgWidth;
    public PreviewPane() {
        setLayout(new BorderLayout(5,5));
        setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
        add(new JLabel("Preview:"), BorderLayout.NORTH);
        label = new JLabel();
        label.setBackground(Color.WHITE);
        label.setOpaque(true);
        label.setPreferredSize(new Dimension(200, 200));
        maxImgWidth = 195;
        label.setBorder(BorderFactory.createEtchedBorder());
        add(label, BorderLayout.CENTER);
    }

    public void propertyChange(PropertyChangeEvent evt) {
        Icon icon = null;
        if(JFileChooser.SELECTED_FILE_CHANGED_PROPERTY.equals(evt
                .getPropertyName())) {
            File newFile = (File) evt.getNewValue();
            if(newFile != null) {
                String path = newFile.getAbsolutePath();
                if(path.endsWith(".gif") || path.endsWith(".jpg")                                                             
                             || path.endsWith(".png") || path.endsWith(".bmp")) {
                    try {
                        BufferedImage img = 
                                             ImageIO.read(newFile);
                        float width = img.getWidth();
                        float height = img.getHeight();
                        float scale = height / width;
                        width = maxImgWidth;
                        height = (width * scale); 
                                           // height should be scaled from new width                            

                    }
                    catch(IOException e) {
                        // couldn't read image.
                    }
                }
            }

            label.setIcon(icon);
            this.repaint();

        }
                   }

                 }

                 public static void main(String args[]) {        
                    // Create an instance of the test application         
                        Converter frame = new Converter();        
                         frame.pack();     
                           frame.setVisible(true);     
                      }
                 }
公共转换器(){ 设置前景(颜色为黑色); getContentPane().setLayout(null); textField=新的JTextField(); textField.setBounds(20,12714,20); getContentPane().add(文本字段); textField.setColumns(10); final JScrollPane scrollPane=新JScrollPane(); 片名(“ABC”); 滚动窗格.立根(0470766,-438); getContentPane().add(滚动窗格); 列表=新JList(); 列表.立根背景(颜色:浅灰色); 列表。设置前景(颜色。灰色); 向量=新向量(); field=新的JTextField(); final JFileChooser fileChooser=新JFileChooser(); 文件选择器.setBounds(10,43,485,463); getContentPane().add(文件选择器); 列表=新JList(向量); 列表.立根背景(颜色:浅灰色); JButton btnNewButton=新JButton(“添加”); btnNewButton.setBounds(505106,89,23); addActionListener(新ActionListener(){ 已执行的公共无效操作(操作事件e){ 添加(); } 私有void add(){ //TODO自动生成的方法存根 { 对于(文件:fileChooser.getSelectedFiles()){ field.setText(file.getAbsolutePath()); 添加(文件); System.out.println(“添加..!!”; } //list.updateUI(); } } }); getContentPane().add(btnNewButton); JButton btnNewButton_1=新JButton(“删除”); Btnewbutton_1.立根(505190,89,23); btnNewButton_1.addActionListener(新ActionListener(){ 已执行的公共无效操作(操作事件e){ 删除(); } 私有无效删除(){ if(list.getSelectedIndices().length>0){ int[]selecteddinces=list.getselecteddinces(); for(int i=selecteddinces.length-1;i>=0;i--){ 向量移除元素(i); System.out.println(“删除..!!”; } } list.updateUI(); } }); getContentPane().add(btnNewButton_1); JButton btnNewButton_2=新JButton(“解码”); Btnewbutton_2.立根(505278,89,23); getContentPane().add(btnNewButton_2); JList list_1=新JList(); 列表1.设置前景(颜色为黑色); 列表1.立根背景(颜色:浅灰色); 列表1.立根(604、109、162、328); getContentPane().add(列表1); 最终JFrame JFrame=新JFrame(); setFont(新字体(“Arial”,Font.BOLD,14)); Jframe.setForeground(颜色:白色); Jframe.setTitle(“附加加载器信息”); Jframe.getContentPane().setLayout(null); } 静态类PreviewPane扩展JPanel实现PropertyChangeListener{ /** * */ 私有静态最终长serialVersionUID=1L; 私人标签; 私人int maxImgWidth; 公共预览页(){ setLayout(新边界布局(5,5)); setboorder(BorderFactory.createEmptyByOrder(5,5,5,5)); 添加(新JLabel(“预览”)、BorderLayout.NORTH; label=新的JLabel(); 标签.背景(颜色.白色); label.set不透明(true); label.setPreferredSize(新尺寸(200200)); 最大宽度=195; label.setboorder(BorderFactory.createEtchedBorder()); 添加(标签、边框布局、中心); } 公共作废属性更改(属性更改事件evt){ 图标=空; 如果(JFileChooser.SELECTED\u FILE\u CHANGED\u PROPERTY.equals)(evt .getPropertyName()){ File newFile=(File)evt.getNewValue(); if(newFile!=null){ 字符串路径=newFile.getAbsolutePath(); if(path.endsWith(“.gif”)| | path.endsWith(“.jpg”) ||path.endsWith(“.png”)| | path.endsWith(“.bmp”)){ 试一试{ BuffereImage img= ImageIO.read(新文件); 浮动宽度=img.getWidth(); 浮动高度=img.getHeight(); 浮动比例=高度/宽度; 宽度=最大宽度; 高度=(宽度*比例); //高度应从新宽度开始缩放 } 捕获(IOE异常){ //无法读取图像。 } } } label.setIcon(图标); 这个。重新绘制(); } } } 公共静态void main(字符串args[]){ //创建测试应用程序的实例 转换器框架=新转换器(); frame.pack(); frame.setVisible(true); } }
如果有人能帮我解决这个问题,那将非常有帮助。

A是A,因此您可以将其添加到A,它将填充整个面板。

您遇到的问题是,您为您创建的
ListModel
列表不支持更改。您需要创建一个
DefaultListModel
,并使用它代替
向量

例:

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            final DefaultListModel<String> model = new DefaultListModel<>();
            JList<String> list = new JList<>(model);

            JButton add = new JButton("Click Me!");
            add.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    model.addElement(model.getSize() + "");
                }
            });

            JPanel p = new JPanel();
            p.add(new JScrollPane(list));
            p.add(add);

            JFrame frame = new JFrame("Example");
            frame.setContentPane(p);
            frame.pack();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
        }
    });
}