Я создал пользовательский рендерер jList, но не могу получить выбранный текст ячейки - PullRequest
0 голосов
/ 15 октября 2019
package com;

import javax.swing.Icon;


public class ImgsNText {

    private String name;
    private Icon img;

    public ImgsNText(String text,Icon icon){
        this.name = text;
        this.img = icon;

    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Icon getImg() {
        return img;
    }

    public void setImg(Icon img) {
        this.img = img;
    }

}

Это установщик получения для моего средства визуализации списка, которое имеет изображение значка и имя строки.

package com;

import java.awt.Component;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JList;
import javax.swing.ListCellRenderer;

public class Renderer extends DefaultListCellRenderer implements ListCellRenderer<Object> {

    @Override
    public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {


        ImgsNText is = (ImgsNText) value;
        setText(is.getName());
        setIcon(is.getImg());

        if(isSelected){
            setBackground(list.getSelectionBackground());
            setForeground(list.getSelectionForeground());

        }else{
            setBackground(list.getBackground());
            setForeground(list.getForeground());
        }
        setEnabled(true);
        setFont(list.getFont());
        return this;
    }

}

Это класс средства визуализации списка, который расширяет DefaultListRenderer, который устанавливает свойства для ячейки списка, когдаоно выбрано или не выбрано

package com;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;

public class ListMain extends javax.swing.JFrame {


    DefaultListModel dm = new DefaultListModel();

    public ListMain() {
        initComponents();
    }

    private void populate(){

        dm.clear();
        dm.addElement(new ImgsNText("Tejack", new ImageIcon("C:\\Users\\tejas\\Documents\\NetBeansProjects\\ChatAppImages\\send.png")));
        dm.addElement(new ImgsNText("kcajet", new ImageIcon("C:\\Users\\tejas\\Documents\\NetBeansProjects\\ChatAppImages\\send.png")));

        jList1.setCellRenderer(new Renderer());
        jList1.setModel(dm);
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        jList1 = new javax.swing.JList<>();
        populatebtn = new javax.swing.JButton();
        clearbtn = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jList1.setBorder(javax.swing.BorderFactory.createMatteBorder(5, 5, 5, 5, new java.awt.Color(0, 0, 153)));
        jList1.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        jList1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jList1MouseClicked(evt);
            }
        });
        jScrollPane1.setViewportView(jList1);

        populatebtn.setText("Populate");
        populatebtn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                populatebtnActionPerformed(evt);
            }
        });

        clearbtn.setText("Clear");
        clearbtn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                clearbtnActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(58, 58, 58)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 251, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(84, 84, 84)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(populatebtn, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(clearbtn, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap(101, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(36, 36, 36)
                        .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 416, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(201, 201, 201)
                        .addComponent(populatebtn)
                        .addGap(44, 44, 44)
                        .addComponent(clearbtn)))
                .addContainerGap(54, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                        

    private void populatebtnActionPerformed(java.awt.event.ActionEvent evt) {                                            
       populate();
    }                                           

    private void clearbtnActionPerformed(java.awt.event.ActionEvent evt) {                                         
        dm.clear();
        jList1.setModel(dm);
    }                                        

    private void jList1MouseClicked(java.awt.event.MouseEvent evt) {                                    


        JOptionPane.showMessageDialog(null,((ImgsNText)jList1.getSelectedValue()).getName());
        //here I get error ImgsNText cannot be castesd to string.
    }                                   

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {

        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new ListMain().setVisible(true);
            }
        });
    }


    // Variables declaration - do not modify                     
    private javax.swing.JButton clearbtn;
    private javax.swing.JList<String> jList1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JButton populatebtn;
    // End of variables declaration                   
}

Я хочу отобразить имя выделенной ячейки, но это выдает ошибку «несовместимые типы: java.lang.String не может быть преобразовано в chat.ImgsNText». Яновичок в программировании, пожалуйста, помогите ....

...