Question

Comment générer ou afficher la vue miniature des images dans un onglet de JtabbedPane en Java et permettre à l'utilisateur de cliquer sur cette image pour être affiché dans un autre onglet d'un 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;
            }
    }
}

Eh bien, ce que j'essaie ici inscrit à l'image de dessin, je veux actualiser et afficher l'image pour que je puisse cliquer sur l'image et l'ouvrir dans un autre onglet pour modifier l'image I Some Some Capture à savoir que cela peut être fait en utilisant jlist mais comment je ne sais pas. Veuillez me suggérer le chemin

Était-ce utile?

La solution

Voici quelques conseils pour vous aider:

  1. Créez un panneau avec GridLayout pour afficher des images dans la vue miniature.
  2. Définissez les images en tant qu'icône d'image dans JLabel et ajoutez que les étiquettes au panneau ci-dessus.
  3. Ajoutez ce panneau à JTabbedPane comme onglet.
  4. Implémentez les écouteurs d'image OnClick. Et l'événement se produit, obtenez cette image et affichez-la dans un autre onglet que celle-ci.

Pour afficher l'image dans un autre onglet:

  1. Créez un panneau avec une seule étiquette.
  2. Ajoutez ce nouveau panneau à JTabbedPane.
  3. Lorsque quelqu'un clique sur une image à partir de la vue de la miniature de l'image, obtenez cette image dans son écouteur et définissez cette image dans JLabel de nouveau panneau.

Pour plus d'aide, montrez ce que vous avez essayé et mieux si vous pouvez publier un court exemple de code de travail qui démontre votre problème.



ÉDITER

Pour une autre exigence décrite dans le commentaire:

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);
}

C'est juste du code de démonstration, vous devrez peut-être le modifier en fonction de vos besoins. C'est juste pour vous montrer comment vous pouvez surveiller Cliquez sur 2 composants et les obtenir dans un autre onglet.

J'aimerais avoir posé une question différente pour cela, j'aurais pu avoir des votes up / réponse acceptés ou le meilleur quelques primes ou les pires votes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top