отображать изображения в Jlabel - PullRequest
0 голосов
/ 27 февраля 2012

Я делаю программу в Netbeans

.. и мне нужно отобразить содержимое папки (есть изображения) в JPanel

... показывать каждое изображение в jlabel

.... Я сделал этот код, но он не работает

...... Я создаю интерфейс с JButton и JPanel:

public class MyInterface extends javax.swing.JFrame
{

    /** Creates new form NewJFrame1 */
    public MyInterface()
    {
        initComponents();
    }

    private File files;

    private JFileChooser es = new JFileChooser();

    String path;
    JLabel label;

    public List<ImageIcon> pictures = new ArrayList<ImageIcon>();

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)
    {

        if (es.showOpenDialog(jPanel1) == JFileChooser.APPROVE_OPTION)
        {
            files = es.getSelectedFile();
            path = files.getAbsolutePath();
            return;
        }

        label.setIcon(pictures.get(WIDTH));
        files = null;
        return;
    }

    private JLabel getLabel(BufferedImage[] images)
    {
        for (int j = 0; j < images.length; j++)
        {
            pictures.add(new ImageIcon(images[j]));
        }
        label = new JLabel(pictures.get(0));
        label.setHorizontalAlignment(JLabel.CENTER);
        return label;
    }

    private JPanel draw()
    {
        JPanel panl = new JPanel();
        for (int j = 0; j < pictures.size(); j++)
        {
            panl.getBorder();
        }
        JPanel panel = new JPanel();
        panl.addAncestorListener(null);
        panl.add(panl);
        return panel;
    }
}

Ответы [ 2 ]

1 голос
/ 27 февраля 2012

Не совсем понятно, что вы пытаетесь сделать, ваш код не компилируется, как показано, и это немного беспорядок. Хотя некоторые указатели:

В draw() вы добавляете JPanel к себе, что является плохим знаком. Затем вы возвращаете другую панель, которая не была изменена. Сортируйте имена panel и panl, чтобы исправить это.

В getLabel(), который фактически нигде не вызывается, вы возвращаете одну метку, созданную из первого изображения. Таким образом, вы сможете отобразить только одно из изображений.

В jButton1ActionPerformed вы возвращаетесь рано, если пользователь выбирает файл, поэтому путь будет задан, но неясно, что еще произойдет.

1 голос
/ 27 февраля 2012

трудно что-то сказать и мудро

1) возможно, нет никаких оснований для создания JLabels и JPanels на лету

2) если вы хотите отобразить только один Image в один момент, тогда

3) если вы хотите отобразить более одного изображения (скажем, до 20-50 Images), тогда используйте GridLayout для JLabels, содержит Icon

4) если число Images не ограничено, используйте JList

...