Java Swing图像缩略图视图以选择图像

Java Swing图像缩略图视图以选择图像,java,swing,javax.swing.text,Java,Swing,Javax.swing.text,如何在java中生成或显示JTabbedPane选项卡中图像的缩略图视图,并允许用户单击该图像以显示在JTabbedPane的其他选项卡中 import javax.swing.*; 导入java.awt.*; 导入java.awt.Event.*; 导入java.io.File; 导入java.awt.image.buffereImage; 导入javax.imageio.imageio; 导入java.io.IOException; 公共类SwindDesign{ 公共静态void mai

如何在java中生成或显示JTabbedPane选项卡中图像的缩略图视图,并允许用户单击该图像以显示在JTabbedPane的其他选项卡中


import javax.swing.*;
导入java.awt.*;
导入java.awt.Event.*;
导入java.io.File;
导入java.awt.image.buffereImage;
导入javax.imageio.imageio;
导入java.io.IOException;
公共类SwindDesign{
公共静态void main(字符串[]args)引发IOException{
JFrame=新JFrame(“分裂疼痛”);
框架设置尺寸(700500);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(新的GridLayout());
//面板
JPanel面板=新的JPanel();
panel.setLayout(新的BoxLayout(panel,BoxLayout.Y_轴));
panel.add(新图片面板());
JTabbedPane jtp=新JTabbedPane();
jtp.addTab(“设置图像”,面板);
addTab(“比较图像”,newjbutton());
帧添加(jtp);
}
}
类PicturePanel扩展了JPanel{
文件夹=新文件(“C:/Documents and Settings/All Users/Documents/My Pictures/Sample Pictures”);
File[]listOfFiles=folder.listFiles();
ImageIcon[]img;
JComponent-lblimg;
JTabbedPane jtp=新JTabbedPane();
私有BuffereImage[]b=新BuffereImage[10];
公共PicturePanel()引发IOException{
for(int i=0;i
这是我在这里尝试的图片,我想实际加载并显示图片,这样我就可以点击图片并在另一个选项卡中打开它来编辑图片
我知道如何使用jlist实现这一点,但我不知道如何做到这一点。请给我指路

以下是一些帮助您的提示:

  • 创建具有GridLayout的面板以在缩略图视图中显示图像
  • 将图像设置为JLabel中的图像图标,并将该标签添加到上面的面板中
  • 将此面板作为选项卡添加到JTabbedPane
  • 实现图像标签的onclick侦听器。事件发生时,获取该图像并将其显示在其他选项卡中 要在“其他”选项卡中显示图像,请执行以下操作:

  • 创建包含一个标签的面板
  • 将此新面板添加到JTabbedPane
  • 当有人从图像缩略图视图中单击图像时,在其侦听器中获取该图像,并在新面板的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);
    }
    
    这只是演示代码,您可能需要根据需要修改它。这只是为了向您展示如何监视单击2个组件并在另一个选项卡中获取它们


    希望你对此提出不同的问题,我可能会得到一些赞成票/接受票,或者最好的一些赏金票或最差的反对票。

    以下是一些帮助你的提示:

  • 创建具有GridLayout的面板以在缩略图视图中显示图像
  • 将图像设置为JLabel中的图像图标,并将该标签添加到上面的面板中
  • 将此面板作为选项卡添加到JTabbedPane
  • 实现图像标签的onclick侦听器。事件发生时,获取该图像并将其显示在其他选项卡中 要在“其他”选项卡中显示图像,请执行以下操作:

  • 创建包含一个标签的面板
  • 将此新面板添加到JTabbedPane
  • 当有人从图像缩略图视图中单击图像时,在其侦听器中获取该图像,并在新面板的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);
    }
    
    这只是演示代码,您可能需要根据需要修改它。这只是为了向您展示如何监视单击2个组件并在另一个选项卡中获取它们


    如果你问了一个不同的问题,我可能会得到一些赞成票/接受票,或者最好的一些赏金票或最差的反对票。

    你能告诉我如何使用java标签的onclick监听器吗?@user1235021添加
    MouseListener
    。使用
    mouseClicked(mouseEvent)
    方法
    MouseListener
    来处理单击。您好,现在我有另一个小问题。我需要从一个选项卡同时单击两个图像以进行比较,我的意思是,这两个单击的图像应该在另一个选项卡中打开以进行比较。您可以建议我如何解决此问题吗?您可以使用JSplitPane在同一jpanel中显示两个图像。我不知道比较逻辑。我想在jtabbed窗格的同一个选项卡中显示两个图像。需要选择在新选项卡中打开的图像两个吗?您可以演示如何在java中使用标签的onclick侦听器吗?@user1235021向其添加
    MouseListener
    。使用
    mouseClicked(mouseEvent)
    方法
    MouseListener
    来处理单击。您好,现在我有另一个小问题。我需要从一个选项卡同时单击两个图像以进行比较,我的意思是,这两个单击的图像应该在另一个选项卡中打开以进行比较。您可以建议我如何解决此问题吗?您可以使用JSplitPane在同一jpanel中显示两个图像。我不知道比较的逻辑。