求助怎么调用ImagePanel让本地图片显示在panel里

qq_37129214 qq_37129214 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区


请教大神,怎么实现按查询按钮,然后相应地址下的图片利用ImagePanel把图片画在panel里。



import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.event.*;
import java.io.*;
import java.sql.ResultSet;

import javax.swing.*;


public class ImageViewerServer extends JFrame{

JLabel l_id = new JLabel("编号:");
JLabel l_name = new JLabel("名称:");
JLabel l_filePath = new JLabel("路径:");
JLabel l_size = new JLabel("大小:");
JLabel l_type = new JLabel("种类:");
JLabel l_time = new JLabel("时间:");


JTextField id = new JTextField(10);
JTextField name = new JTextField(10);
JTextField filePath = new JTextField(10);
JTextField size = new JTextField(10);
JTextField type = new JTextField(10);
JTextField time = new JTextField(10);


JButton b_query = new JButton("查询");
JButton b_del = new JButton("删除");
JButton b_update = new JButton("更新");
JButton b_add = new JButton("增加");
JButton b_before = new JButton("上一个");
JButton b_next = new JButton("下一个");
JButton b_select = new JButton("选择目录");

ResultSet rst = null;


private ImagePanel mv;
//private ImageViewer1 outer=this;
public ImageViewerServer() {
super("Image Viewer 1.1");

mv = new ImagePanel();
Panel p1 = new Panel();
Panel p2 = new Panel();

p1.add(l_id);
p1.add(id);
p1.add(l_name);
p1.add(name);
p1.add(l_filePath);
p1.add(filePath);
p1.add(l_size);
p1.add(size);
p1.add(l_type);
p1.add(type);
p1.add(l_time);
p1.add(time);
p2.add(b_select);
p2.add(b_query);
p2.add(b_del);
p2.add(b_update);
p2.add(b_add);
p2.add(b_before);
p2.add(b_next);




add(mv,BorderLayout.CENTER);
add(p1,BorderLayout.NORTH);
add(p2,BorderLayout.SOUTH);

//setLayout(new FlowLayout(FlowLayout.CENTER));

b_query.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
if(e.getSource()==b_query) {

try {
rst = SqlDB.execQuery("select * from inf where id='"+id.getText().trim()+"'");
if(rst.next()) {
name.setText(rst.getString(2));
filePath.setText(rst.getString(3));
size.setText(rst.getString(4));
type.setText(rst.getString(5));
time.setText(rst.getString(6));
System.out.println("已查询");
}

} catch(Exception ex) {
System.out.println(ex.getMessage());
}
}

}

});

b_add.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
if(e.getSource()==b_add) {
try {
SqlDB.execUpdate("insert into inf values('"+
id.getText().trim()+"','"+
name.getText().trim()+"','"+
filePath.getText().trim()+"','"+
size.getText().trim()+"','"+
type.getText().trim()+"','"+
time.getText().trim()+"')");
System.out.println("insert into inf values('"+
id.getText().trim()+"','"+
name.getText().trim()+"','"+
filePath.getText().trim()+"','"+
size.getText().trim()+"','"+
type.getText().trim()+"','"+
time.getText().trim()+"')");
} catch(Exception ex) {
System.out.println(ex.getMessage());
}
}
}

});


b_update.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
if(e.getSource()==b_update) {
try {
SqlDB.execUpdate("update inf set name='" +
name.getText().trim()+
"' where id='" +id.getText().trim()+"'");
System.out.println("已更新");
} catch(Exception ex) {
System.out.println(ex.getMessage());
}

}
}

});

b_del.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
if(e.getSource()==b_del) {
SqlDB.execUpdate("delete from inf" +
" where id='"+id.getText().trim()+"'");
String fileName = "D:/temp/"+GetDate.getDate()+"_SJ"+id.getText().trim()+".jpg";
System.out.println("D:/temp/"+GetDate.getDate()+"_SJ"+id.getText().trim()+".jpg");
System.out.println(id.getText().trim());
File file = new File(fileName );
file.delete();
System.out.println("已删除");
}
}

});


b_next.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==b_next) {
b_next.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub

mv.setCurrent(mv.getCurrent()-1);
mv.repaint();
}
});
try {
rst = SqlDB.execQuery("select * from inf where id='"+ (Integer.parseInt(id.getText().trim())+1)+"'");
System.out.println("select * from inf where id='"+ (Integer.parseInt(id.getText().trim())+1)+"'");
if(rst.next()) {
id.setText(rst.getString(1));
name.setText(rst.getString(2));
filePath.setText(rst.getString(3));
size.setText(rst.getString(4));
type.setText(rst.getString(5));
time.setText(rst.getString(6));
System.out.println("下一条");
}
} catch(Exception ex) {
System.out.println(ex.getMessage());
}finally {
SqlDB.closeDB();
}
}
}
});

b_before.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==b_before) {
b_before.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
mv.setCurrent(mv.getCurrent()+1);
mv.repaint();
}
});
try {
rst = SqlDB.execQuery("select * from inf where id='"+ (Integer.parseInt(id.getText().trim())-1)+"'");
System.out.println("select * from inf where id='"+ (Integer.parseInt(id.getText().trim())-1)+"'");
if(rst.next()) {
id.setText(rst.getString(1));
name.setText(rst.getString(2));
filePath.setText(rst.getString(3));
size.setText(rst.getString(4));
type.setText(rst.getString(5));
time.setText(rst.getString(6));
System.out.println("上一条");
}
} catch(Exception ex) {
System.out.println(ex.getMessage());
}finally {
SqlDB.closeDB();
}
}
}
});

b_select.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
int returnValue = fileChooser.showOpenDialog(null);
File selectedFile=null;

if(returnValue==JFileChooser.APPROVE_OPTION) {
selectedFile=fileChooser.getSelectedFile();
}

if(selectedFile.isDirectory()){
mv.changDir(selectedFile);
} else {
File parentdir=selectedFile.getParentFile();
mv.changDir(parentdir,selectedFile);
}


}
});

}






public static void main(String[] args) {
ImageViewerServer myapp = new ImageViewerServer();
myapp.setSize(1000,600);
myapp.setVisible(true);
myapp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}
}
...全文

相关推荐

Java Swing实现窗体添加背景图片的2种方法详解

主要介绍了Java Swing实现窗体添加背景图片的2种方法,结合实例形式较为详细的分析了Swing实现窗体添加背景图片的方法,并总结分析了Swing重绘中repaint与updateUI的区别,需要的朋友可以参考下

weixin_38595850

C#命名规范C#命名规范

大家都知道写程序应该有个好的命名规范,为了工作方便,贴出来。

yantou

用Delphi实现Word文件的预览

使用DELHPI的设计与编程来实现与WORD的结合,达到控制的目的。 您不必从文件中读取所有的图像 ? 您可以创建自己的图像。要创建自己的图像,最灵活的方法是用一个 BufferedImage 对象,它是 Image 类的一个子类,它把图像数据存储在一个可以被访问的缓冲区中。它还支持各种存储像素数据的方法:使用或不使用 alpha 通道、不同种类的颜色模型以及颜色组件的各种精确度。ColorModel 类提供一种灵活的方法定义各种颜色模型,以和 BufferedImage 对象一起使用。为了理解颜色模型工作的基本知识,我们将只使用一个缺省的颜色模型,其颜色组件由 RGB 值和一个缓冲类型(存储 8 位的 RGB 颜色值加上一个 alpha 通道)组成。这一缓冲类型由 BufferedImage 类中的常量 TYPE_INT_ARGB 指定,它意味着每个像素要用一个 int 值。每个像素的值是以 8 位字节形式存储一个 alpha 组件加上 RGB 颜色组件。我们可以用给定的宽度和高度创建一个这种类型的 BufferedImage 对象,代码语句如下: int width = 200; int height = 300; BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_ARGB); 这段代码创建了一个 BufferedImage 对象,它代表一个 200 像素宽、300 像素高的图像。为了应用这个图像,我们需要有图形上下文,而 BufferedImage 对象的 createGraphics() 方法就返回一个与该图像相关的 Graphics2D 对象: int width = 200; Graphics2D g2D = image.createGraphics(); 使用 g2D 对象的操作会修改 BufferedImage 对象 image 的像素。利用这个对象,您现在完全有能力应用 BufferedImage 对象。您可以绘制形状、图像、GeneralPath 对象或任何别的东西,还可以为图形上下文设置 alpha 组合对象。您同时还拥有 Graphics2D 对象提供的全部仿射变形能力。 如果要从 BufferedImage 对象获取单个像素,可以通过调用它的 getRGB() 方法,并提供该像素的 x,y 坐标作为 int 类型的参数。这个像素会按 TYPE_INT_ARGB 格式以 int 类型返回,它由四个 8 位的值(代表 alpha 值和 RGB 颜色组件)组成一个 32 位字。同时 getRGB() 还有一个重载的版本,它从一部分图像数据中返回一个像素数组。您也可以通过调用 setRGB() 方法来设置单个像素。前两个参数是该像素的坐标值,第三个参数是待设定的值,类型为 int。这个方法也有一个版本可以设置像素数组的值。 至此我们已经完成了像素操作的学习。下面我们要建立一个 applet,它在 Wrox 徽标背景上使 BufferedImage 对象具有动画效果。我们的示例还将演示怎样能让图像局部透明。applet 的基本内容如下所示: import java.awt.*; import java.awt.image.*; import java.awt.geom.*; import javax.swing.*; public class ImageDrawDemo extends JApplet { // The init() method to initialize everything... // The start() method to start the animation... // The stop() method to stop the animation... // The ImagePanel class defining the panel displaying the animation... // Data members for the applet... } 创建一个图像 一个子图形是一个小的图形图像,可以将其绘制在静态图像以创建动画。要创建动画效果,您只要随着时间推移,在不同的位置和方向上绘制子图形。当然,利用坐标系的变形可以使之简化许多。游戏经常使用子图形 ? 由于您只需要在一个静态背景上绘制子图形,所以可以使动画所占用的处理器的时间大大减少。我们对使用 BufferedImage 对象的兴趣意味着我们将不再花费精力去研究减少处理器时间的最佳技术,而是把注意力放在理解怎样才能在一个程序内部创建和使用图像上。 我们的 BufferedImage 对象看上去如图 1 中的图像: 图 1. BufferedImage 子图形 这个图像是一个以 spriteSize 为边长的正方形。图像其它部分的尺寸值都与这个边长相关。实际上这里只有两个几何实体,一条线和一个圆,都在不同位置和方向重复出现。如果我们创建一个 Line2D.Double 对象代表线,创建一个 Ellipse2D.Double 对象代表圆,那么我们就可以通过移动用户坐标系和画这两个对象中的一个或其它的对象而画出整个图像。 如果是按真正面向对象的方法,应该定义一个类代表一个子图形,可能是作为 BufferedImage 的一个子类,但由于我们是在探索使用 BufferedImage 对象的技巧,因此用一个 createSprite() 方法来画出 BufferedImage 对象上的子图形会更适合我们的目的。因为该方法只是我们的 applet 类的一个成员,所以我们将为 applet 添加数据成员以存储任何需要的数据。您可以把我们将使用的数据成员插入到 applet 类中,如下所示: double totalAngle; // Current angular position of sprite double spriteAngle; // Rotation angle of sprite about its center ImagePanel imagePanel; // Panel to display animation BufferedImage sprite; // Stores reference to the sprite int spriteSize = 100; // Diameter of the sprite Ellipse2D.Double circle; // A circle - part of the sprite Line2D.Double line; // A line - part of the sprite // Colors used in sprite Color[] colors = {Color.red , Color.yellow, Color.green , Color.blue, Color.cyan, Color.pink , Color.magenta, Color.orange}; java.util.Timer timer; // Timer for the animation long interval = 50; // Time interval msec between repaints 这些成员的一般用途可以从注释中清楚地看到。下面我们要看一看开发代码时它们是怎样被使用的。 createSprite() 方法需要做的第一件事就是创建 BufferedImage 对象 sprite,然后我们还需要一个 Graphics2D 对象用于在 sprite 图像上绘画。下面就是完成这些操作的代码: BufferedImage createSprite(int spriteSize) { // Create image with RGB and alpha channel BufferedImage sprite = new BufferedImage(spriteSize, spriteSize, BufferedImage.TYPE_INT_ARGB); Graphics2D g2D = sprite.createGraphics(); // Context for buffered image // plus the rest of the method... } sprite 对象的宽和高的值都是 spriteSize,图像的类型为 TYPE_INT_ARGB,就是说每个像素的 alpha 值和颜色组件是以一个单独的 int 值存储的,而颜色是以 8 位的红、绿、蓝组件的形式存储的。这意味着我们的 sprite 图像将占用 40,000 字节,这只是浏览一个网页会占用的内存的很小一部分。而这并不影响网页的下载时间,因为在执行 applet 的时候,这部分内存是在本地机器上被分配的。除了作为网页本身的 HTML 文件的内容外,下载时间还取决于 applet 的 .class 文件的大小,以及在它执行时下载的图像或其它文件。 创建一个透明的背景 在 sprite 图像中,alpha 通道是很重要的,因为我们希望背景能完全透明。在绘画过程中,只有 sprite 对象本身应该是可见的,而不是整个 100×100 的矩形图像。我们可以很容易地实现这一目的,只要开始先使整个 sprite 图像区域透明(即,alpha 值为 0.0f),然后把我们想要画的图形绘制在上面,使之不透明(alpha 值为 1.0f)。以下是使整个图像透明的代码: // Clear image with transparent alpha by drawing a rectangle g2D.setComposite(AlphaComposite.getInstance(AlphaComposite.CLEAR, 0.0f)); Rectangle2D.Double rect = new Rectangle2D.Double(0,0,spriteSize,spriteSize); g2D.fill(rect); 我们首先使用 AlphaComposite 对象按照 CLEAR 规则设置 alpha 合成值,把颜色组件设置为零,又通过设置 alpha 值为 0.0f,使之透明。然后我们填充一个覆盖整个图像区域的矩形。我们不必设置颜色值,因为根据 CLEAR 规则,每个像素的前景和背景色所占成分都是零,所以这两者都不参与像素的生成。但我们仍要填充该矩形,因为这将确定被操作的图像像素。 这里,我们可以稍微了解一下怎样控制图像的质量。 着色微调 对着色操作的许多方面而言,都有一个在质量和速度间选择的问题。着色操作就像大多数事情一样 ? 质量是需要代价的,而这里的代价就是处理时间。所有的着色操作都有缺省设置,其中存在一个选择,缺省设置是特定于平台的,但您可以通过调用用于着色的 Graphics2D 对象的 setRenderingHint() 方法自己选择。虽然只有一些微调,如果您的计算机不支持与您指定的微调相对应的着色操作选项,这些微调就无法生效。 通过添加以下对 createSprite() 方法的调用,可以确保得到由我们的 alpha 合成操作可能生成的最好效果。 BufferedImage createSprite(int spriteSize) { // Create image with RGB and alpha channel BufferedImage sprite = new BufferedImage(spriteSize, spriteSize, BufferedImage.TYPE_INT_ARGB); Graphics2D g2D = sprite.createGraphics(); // Context for buffered image // Set best alpha interpolation quality g2D.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY); // Clear image with transparent alpha by drawing a rectangle g2D.setComposite(AlphaComposite.getInstance(AlphaComposite.CLEAR, 0.0f)); Rectangle2D.Double rect = new Rectangle2D.Double(0,0,spriteSize,spriteSize); g2D.fill(rect); // plus the rest of the method... } RenderingHints 类定义了多种着色微调,它们存储在一个映射集的 Graphics2D 对象里。setRenderingHint() 方法的参数是一个键以及对应的键值。在我们的代码中,第一个参数是代表 alpha 合成微调的键,第二个参数是该微调的值。该微调的其它可能的值有 VALUE_ALPHA_INTERPOLATION_DEFAULT,代表平台缺省值;以及 VALUE_ALPHA_INTERPOLATION_SPEED,代表追求速度而不是质量。 您还可以为下面的键提供微调: 键 描述 KEY_ANTIALIASING 决定是否使用抗锯齿。当着色有倾斜角度的线时,通常会得到一组阶梯式的像素排列,使这条线看上去不平滑,经常被称为 锯齿状图形。抗锯齿是一种技术,它设置有倾斜角度的线的像素亮度,以使线看起来更平滑。因此,这个微调是用来决定在着色有倾斜角度的线时是否在减少锯齿状图形上花费时间。可能的值有 VALUE_ANTIALIAS_ON, _OFF 或 _DEFAULT。 KEY_COLOR_RENDERING 控制颜色着色的方式。可能的值有 VALUE_COLOR_RENDER_SPEED, _QUALITY 或 _DEFAULT。 KEY_DITHERING 控制如何处理抖动。抖动是用一组有限的颜色合成出一个更大范围的颜色的过程,方法是给相邻像素着色以产生不在该组颜色中的新的颜色幻觉。可能的值有 VALUE_DITHER_ENABLE, _DISABLE 或 _DEFAULT。 KEY_FRACTIONALMETRICS 控制显示文本的质量。可能的值有 VALUE_FRACTIONALMETRICS_ON, _OFF 或 _DEFAULT。 KEY_INTERPOLATION 确定怎样做内插。 在对一个源图像做变形时,变形后的像素很少能够恰好对应目标像素位置。在这种情况下,每个变形后的像素的颜色值不得不由周围的像素决定。 内插就是实现上述过程。有许多可用的技术。可能的值,按处理时间从最多到最少,是 VALUE_INTERPOLATION_BICUBIC, _BILINEAR 或 _NEAREST_NEIGHBOR。 KEY_RENDERING 确定着色技术,在速度和质量之间进行权衡。可能的值有 VALUE_RENDERING_SPEED, _QUALITY 或 _DEFAULT。 KEY_TEXT_ANTIALIASING 确定对文本着色时是否抗锯齿。可能的值有 VALUE_TEXT_ANTIALIASING_ON, _OFF 或 _DEFAULT。

sbrian

五子棋代码

import javax swing ; import java awt ; import java awt event ; import java util ; import javax swing event ; public class wuziqi { public static void main String[] args { SimpleFrame frame new SimpleFrame ; frame setDefaultCloseOperation JFrame EXIT ON CLOSE ; frame show ; } } class AboutFrame extends JFrame { public AboutFrame { setSize 400 350 ; setResizable false ; setTitle "关于" ; Toolkit tk Toolkit getDefaultToolkit ; Image ff tk getImage "false gif" ; setIconImage ff ; Dimension screenSize tk getScreenSize ; setLocation screenSize width 400 2 screenSize height 300 2 ; FontPanel fpanel new FontPanel ; Container con getContentPane ; con add fpanel ; } } class FontPanel extends JPanel { public void paintComponent Graphics g { super paintComponent g ; Font f new Font "宋体" Font BOLD 22 ; g setFont f ; g drawString "五子棋)" 10 30 ; f new Font "楷体 GB2312" Font PLAIN 18 ; g setFont f ; g drawString "设计者:Rick carter" 10 120 ; g drawString "本程序仅供大家参考及学习 " 10 225 ; g drawString "未经本人允许请勿用于任何商业活动 " 10 250 ; } } class SimpleFrame extends JFrame { public SimpleFrame { setSize WIDTH HEIGHT ; setResizable false ; setTitle "五子棋(10 10)" ; Toolkit tk Toolkit getDefaultToolkit ; Image img tk getImage "map gif" ; setIconImage img ; Dimension screenSize tk getScreenSize ; setLocation screenSize width WIDTH 2 screenSize height HEIGHT 2 ; final AboutFrame aboutFrame new AboutFrame ; ImagePanel panel new ImagePanel ;">import javax swing ; import java awt ; import java awt event ; import java util ; import javax swing event ; public class wuziqi { public static void main String[] args { SimpleFrame frame new

qq_26569679

半条命的源代码

地址:http://www.gameres.com/bbs/showthread.asp?threadid=1360

chenxh
评论 4
收藏 已收藏
分享
返回顶部
qq_37129214
Java SE 62,620 成员 307,251 内容