Просмотр миниатюр изображений Java Swing для выбора изображения

StackOverflow https://stackoverflow.com/questions/9461320

  •  13-11-2019
  •  | 
  •  

Вопрос

Как создать или показать миниатюры изображений на вкладке JTabbedPane в Java и позволить пользователю щелкнуть это изображение для отображения на другой вкладке JTabbedpane?


    import javax.swing.*;
    import java.awt.*;
    import java.awt.Event.*;
    import java.io.File;
    import java.awt.image.BufferedImage;
    import javax.imageio.ImageIO;
    import java.io.IOException;

    public class SwindDesign {
    public static void main(String[] args) throws IOException {
        JFrame frame = new JFrame("Split Pain");
        frame.setSize(700, 500);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new GridLayout());

        //panel
        JPanel panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
        panel.add(new PicturePanel());

       JTabbedPane jtp = new JTabbedPane();

         jtp.addTab("Set Image", panel);
          jtp.addTab("Compare Image", new JButton());
          frame.add(jtp);

    }
}
class PicturePanel extends JPanel {

    File folder = new File("C:/Documents and Settings/All Users/Documents/My      Pictures/Sample Pictures");
    File[] listOfFiles = folder.listFiles();
    ImageIcon[] img ;
    JComponent lblimg;
    JTabbedPane jtp = new JTabbedPane();
    private BufferedImage[] b = new BufferedImage[10];

    public PicturePanel() throws IOException {
        for (int i = 0; i < listOfFiles.length; i++) {
            System.out.println("chek panth"+listOfFiles[i].getName().toString());
            b[i] = ImageIO.read(new File("C:/Documents and Settings/All Users/Documents/My Pictures/Sample Pictures/" + listOfFiles[i].getName().toString()));
        }
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponents(g);
        Graphics2D g2 = (Graphics2D) g;
        int k = 10;
        for (int j = 0; j < listOfFiles.length - 1; j++) {
            g2.drawImage(b[j], k, 0, 100, 100, null);
            k = k + 75;
            }
    }
}

Ну, это то, что я пытаюсь здесь, связанное с изображением рисования, я хочу активировать, и показать изображение, чтобы я мог нажать на изображение и открыть его в другой вкладке, чтобы отредактировать изображение I, как можно узнать, что это можно сделать, используя JList, но как это я не знаю.пожалуйста, предложите мне путь

Это было полезно?

Решение

Вот несколько советов, которые помогут вам:

  1. Создайте панель с GridLayout для отображения изображений в виде миниатюр.
  2. Установите изображения в качестве значков изображений в JLabel и добавьте эти метки на панель выше.
  3. Добавьте эту панель в JTabbedPane как вкладку.
  4. Реализуйте прослушиватели onclick меток изображений.И происходит событие, позволяющее получить это изображение и отобразить его на другой вкладке, кроме этой.

Чтобы отобразить изображение на другой вкладке:

  1. Создайте панель с одной меткой.
  2. Добавьте эту новую панель в JTabbedPane.
  3. Когда кто-то нажимает на изображение в режиме просмотра миниатюр, поместите это изображение в его прослушиватель и установите это изображение в JLabel новой панели.

Для получения дополнительной помощи покажите нам, что вы пробовали, и лучше, если вы опубликуете короткий пример рабочего кода, демонстрирующий вашу проблему.



РЕДАКТИРОВАТЬ

Для другого требования, описанного в комментарии:

boolean isSelected = false;
JButton jButton;
void imageClickTest() throws MalformedURLException, IOException {
    final JFrame frame = new JFrame("Demo");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(400, 400);
    frame.setLayout(new BorderLayout());

    final JTabbedPane tabbedPane = new JTabbedPane();

    JPanel pane = new JPanel();
    JButton button;
    pane.setLayout(new BorderLayout());

    button = new JButton("I'm second button");
    button.setIcon(new ImageIcon(ImageIO.read(new URL("http://cdn5.iconfinder.com/data/icons/ie_Financial_set/24/26.png"))));
    button.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            JButton button = (JButton) e.getSource();
            if(isSelected) {
                System.out.println("two selected");
                button.setBorder(BorderFactory.createEtchedBorder());
                isSelected = false;
                JSplitPane jSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
                jSplitPane.add(button);
                jButton.setBorder(BorderFactory.createEtchedBorder());
                jButton.setText("First click me");
                jSplitPane.add(jButton);
                jSplitPane.setDividerLocation(150);
                tabbedPane.addTab("Image Comparision", jSplitPane);
            }
        }
    });
    pane.add(button, BorderLayout.SOUTH);

    button = new JButton("First click me");
    button.setIcon(new ImageIcon(ImageIO.read(new URL("http://cdn4.iconfinder.com/data/icons/REALVISTA/web_design/png/24/testimonials.png"))));
    button.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            JButton button = (JButton) e.getSource();
            button.setBorder(BorderFactory.createLineBorder(Color.RED, 5));
            button.setText("Now Click on second button.");
            jButton = button;
            isSelected = true;
        }
    });
    pane.add(button, BorderLayout.NORTH);

    button = new JButton("I'm just extra button");
    button.setIcon(new ImageIcon(ImageIO.read(new URL("http://cdn2.iconfinder.com/data/icons/crystalproject/64x64/apps/kservices.png"))));
    button.setEnabled(false);
    pane.add(button, BorderLayout.CENTER);

    tabbedPane.addTab("ImagePane", pane);
    frame.add(tabbedPane, BorderLayout.CENTER);
    frame.setVisible(true);
}

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

Хотелось бы, чтобы вы задали другой вопрос по этому поводу, возможно, я получу несколько голосов за / принятый ответ или лучший ответ. какая-то награда или худшие отрицательные голоса.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top