0

ユーザーがドラッグアンドドロップで移動できる画像のリストを実装する必要がありました。それは私が使用しているコードです:

    ...
    model = new DefaultListModel();
    imageList = new JList(model);
    imageList.getSelectionModel().setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
    imageList.setTransferHandler(new ListItemTransferHandler());
    imageList.setDropMode(DropMode.INSERT);
    imageList.setDragEnabled(true);
    imageList.setLayoutOrientation(JList.HORIZONTAL_WRAP);
    imageList.setVisibleRowCount(1);
    imageList.setFixedCellWidth(405);
    imageList.setFixedCellHeight(height);
    imageList.setCellRenderer(new IconCellRenderer());

次に、ファイルを BufferedImages としてロードし、モデルに追加します

私の IonCellRenderer クラスは次のとおりです。

    class IconCellRenderer extends DefaultListCellRenderer {
    private static final long serialVersionUID = 1L;

    private int size1;
    private int size2;
    private int spostamento;
    private BufferedImage icon;

    IconCellRenderer() {
        this(400,600);
    }

    IconCellRenderer(int size1,int size2) {
        this.size1 = size1;
        this.size2 = size2;
        spostamento = 4;
        icon = new BufferedImage(size1,size2,BufferedImage.TYPE_INT_ARGB);
    }

    @Override
    public Component getListCellRendererComponent(
            JList list, 
            Object value, 
            int index, 
            boolean isSelected, 
            boolean cellHasFocus) {
        Component c = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
        if (c instanceof JLabel && value instanceof BufferedImage) {
            JLabel l = (JLabel)c;
            l.setText("");
            BufferedImage i = (BufferedImage)value;
            l.setIcon(new ImageIcon(icon));


            Graphics2D g = icon.createGraphics();
            g.setColor(new Color(0,0,0,0));
            g.clearRect(spostamento, 0, size1, size2);
            g.drawImage(i,spostamento,0,size1,size2,this);



            g.dispose();
        }
        return c;
    }

    @Override 
    public Dimension getPreferredSize() {
        return new Dimension(size1, size2);
    }
}

ただし、コードを実行すると機能しますが、表示される画像の品質が非常に悪く、一部の行が表示されません。画像のサイズが大きい (つまり 1488x2105) ためかどうかはわかりませんが、サイズを 400x600 に変更しています。

どうすれば解決できますか?

アドバイスありがとう、ステファノ・フランキーニ

4

0 に答える 0