0

JLabelMySQL に blob タイプのフィールドがあり、このフィールドのデータをアイコンとして配置したいと考えています。たとえば、これJLabelは私のフォームのユーザーのプロフィール画像になります。

私はこのコードを使用しましたが、何も起こりません。またfix to width、jlabelの画像サイズを修正したい

DefaultTableModel pic = MyDB.DataTable("SELECT `Picture` FROM `photo` WHERE `Employee ID` = 'EQ0103'");
     if (pic.getRowCount() > 0){
         Blob blob = pic.getBlob(1);
         byte[] image1 = blob.getBytes(1, ALLBITS);
         ImageIcon image = new ImageIcon(image1);
         picture.setIcon(image);
         getContentPane().add(picture);
         setVisible(true);
     }

picture私のjlabelの名前です

4

5 に答える 5

6

最初: データベースから入力ストリームを返します。

String query = "SELECT `Picture` FROM `photo` WHERE `Employee ID` = 'EQ0103'";
stmt = (PreparedStatement) con.prepareStatement(query);
ResultSet result = stmt.executeQuery();

データベースから返された画像

BufferedImage im = ImageIO.read(result.getBinaryStream(1));

次に、この画像にリサイズします:

im =linearResizeBi(im, /*width*/, /*height*/);

linearResizeBiメソッド:

static public BufferedImage linearResizeBi(BufferedImage origin, int width, int height) {
        BufferedImage resizedImage = new BufferedImage(width, height ,BufferedImage.TYPE_INT_RGB);
        Graphics2D g = resizedImage.createGraphics();
        float xScale = (float)width / origin.getWidth();
        float yScale = (float)height / origin.getHeight();
        AffineTransform at = AffineTransform.getScaleInstance(xScale,yScale);
        g.drawRenderedImage(origin,at);
        g.dispose();
        return resizedImage;
    }

次に、画像をアイコンにします。

ImageIcon image1 = new ImageIcon(im);

次に、アイコンを Jlabel に追加します。

picture.setIcon(image);
getContentPane().add(picture);
setVisible(true);
于 2013-03-24T14:29:18.780 に答える
1

ファイル名は次のようにする必要があります

  txtPicPath.setText(file.getAbsoluteFile().toString());

これらのコードを使用しましたが、jlabelのサイズにも適合します

 ResultSet rst = MyDB.rsFetch("SELECT `Picture` FROM `photo` WHERE `Employee ID` = '"+ Data.User.getText()+"'");
         while (rst.next()) {
         Blob filenameBlob = rst.getBlob("Picture");
         byte[] content = filenameBlob.getBytes(1L,(int)filenameBlob.length());
         ImageIcon ik = new ImageIcon(content);
         Image img = ik.getImage();
         Image newimg = img.getScaledInstance(Data.picture.getWidth(), Data.picture.getHeight(), java.awt.Image.SCALE_SMOOTH);
         ik = new ImageIcon(newimg);
         Data.picture.setIcon(ik);
         }
于 2013-03-26T07:28:26.037 に答える
1

結果セットを使用する

 Statement stmt = con.createStatement();
 ResultSet rs = stmt.executeQuery("SELECT `Picture` FROM `photo` WHERE `Employee ID` = 'EQ0103'");

から変更する場合があります。

Blob blob = rs.getBlob(1);

の別の選択肢に

InputStream binaryStream = rs.getBinaryStream(1);

ここでブログから画像を取得する公式ガイドを参照できます http://docs.oracle.com/javase/1.5.0/docs/guide/jdbc/blob.html

于 2013-03-20T04:20:48.800 に答える
0

Blob には getBinaryStream() があり、Blob に格納されているデータを含むバイト ストリームを返します。

Icon を実装する ImageIcon には、引数としてバイト配列を取るコンストラクタがあります。

JLabel には setIcon(Icon) メソッドがあります。

label.setIcon(new ImageIcon(ByteStreams.toByteArray(blob.getBinaryStream())));
于 2013-03-20T15:23:38.907 に答える
0

試す:

picture.setIcon(new ImageIcon(ByteStreams.toByteArray(blob.getBinaryStream())));
于 2013-03-21T11:19:47.323 に答える