Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 分开两组代码_Java_Components - Fatal编程技术网

Java 分开两组代码

Java 分开两组代码,java,components,Java,Components,如何将组件与sql方法分离?我需要将这组代码与其他代码分开。我有困难,因为它链接 Component droplabel = new DropTargetTextArea("test", "testing"); JLabel cellLabel = new JLabel(icon); JPanel cellPanel = new JPanel(new BorderLayout()); cellPanel.add(cellLabel, Bord

如何将组件与sql方法分离?我需要将这组代码与其他代码分开。我有困难,因为它链接

 Component droplabel = new DropTargetTextArea("test", "testing");

JLabel cellLabel = new JLabel(icon);

            JPanel cellPanel = new JPanel(new BorderLayout());
            cellPanel.add(cellLabel, BorderLayout.NORTH);
            cellPanel.add(droplabel, BorderLayout.CENTER);

            gridPanel.add(cellPanel);
////完整代码

connection = getConnection();
try {  
statement = (PreparedStatement) connection
.prepareStatement("select image from image");
 result = statement.executeQuery();
while (result.next()) {
byte[] image = null;
image = result.getBytes("image");

Image img = Toolkit.getDefaultToolkit().createImage(image);
ImageIcon icon = new ImageIcon(img);

 Component droplabel = new DropTargetTextArea("test", "testing");

JLabel cellLabel = new JLabel(icon);

            JPanel cellPanel = new JPanel(new BorderLayout());
            cellPanel.add(cellLabel, BorderLayout.NORTH);
            cellPanel.add(droplabel, BorderLayout.CENTER);

            gridPanel.add(cellPanel);

}

}

这里基本上有两个任务:

  • 从基础数据库检索一组图像。我之所以说set,是因为您使用while循环来迭代ResultSet

    connection = getConnection();
    try {  
        statement = (PreparedStatement) connection.prepareStatement("select image from image");
        result = statement.executeQuery();
        while (result.next()) {
            byte[] image = null;
            image = result.getBytes("image");
        }
    }
    
    您可以将此代码提取到单独的方法中,并使用字节数组存储检索到的信息。此数组将是该方法的返回值

  • 创建图像图标并在JLabels中使用它们

    Image img = Toolkit.getDefaultToolkit().createImage(image);
    ImageIcon icon = new ImageIcon(img);
    Component droplabel = new DropTargetTextArea("test", "testing");
    JLabel cellLabel = new JLabel(icon);
    
    JPanel cellPanel = new JPanel(new BorderLayout());
    cellPanel.add(cellLabel, BorderLayout.NORTH);
    cellPanel.add(droplabel, BorderLayout.CENTER);
    gridPanel.add(cellPanel);
    
    此代码也可以移动到单独的方法。该方法检索图像数组(或仅检索一个,具体取决于您的设置)并创建ImageIcon


  • 第一个小提示:您应该阅读JPA和MVC。
    现在来看看你的代码:创建一个新类,给她一个像“DatabaseHelper”这样的名字,然后把你的整个JDBC代码放在一个像“getAllImages()”这样的方法中,并为图像创建一个容器类(POJO)。对于第一个学期,这应该对你有帮助,但从长远来看,你应该使用JPA和MVC。

    阅读关于
    MVC
    模式的内容,这将挽救你的生命。另外,为什么图像存储在数据库中而不仅仅是磁盘上?我需要将它们存储在数据库中。这是分配的一个要求
    模型视图控制模式
    在这里会很有帮助,但我实现分离的第一步是为主要GUI组件创建一个单独的类,然后有一个方法允许您更新GUI上的当前图标,并从检索图像的位调用该图标。这将为您提供模式的
    模型
    视图
    组件。然后,控制器的作用应该变得更加明显。但是,它无法识别这行代码中的变量映像,映像img=Toolkit.getDefaultToolkit().createImage(映像);如果我制作一个标签数组并将图像加载到其中,有人会解决这个问题吗?还有人知道如何实现这一点吗?如果将代码拆分为两个方法,第二个方法可能类似于
    private void addLabels(byte[]images){…}
    。在这个方法中,您可以执行类似于
    Image img=Toolkit.getDefaultToolkit().createImage(images[0])的操作这不是很好的代码,但应该会让您对我的想法有一个印象。