Java 在JFrame中切换图片
嗨,我在JFrame中切换图片时遇到问题。我正在将JFrame初始化为黑色图片,接下来我要将“sample2.jpg”加载到它: Display.javaJava 在JFrame中切换图片,java,swing,jframe,awt,Java,Swing,Jframe,Awt,嗨,我在JFrame中切换图片时遇到问题。我正在将JFrame初始化为黑色图片,接下来我要将“sample2.jpg”加载到它: Display.java public class Display extends Canvas implements Runnable{ /** * */ private static final long serialVersionUID = 1L; public static int WIDTH=1280; public static int HE
public class Display extends Canvas implements Runnable{
/**
*
*/
private static final long serialVersionUID = 1L;
public static int WIDTH=1280;
public static int HEIGHT=720;
public static final String TITLE = "rainbow";
private Thread thread;
private boolean running = false;
private Render render;
private Screen screen;
private BufferedImage img;
private int pixels[];
public Display(){
Dimension size = new Dimension(WIDTH,HEIGHT);
setPreferredSize(size);
setMinimumSize(size);
setMaximumSize(size);
screen = new Screen(WIDTH, HEIGHT);
img = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
pixels = ((DataBufferInt)img.getRaster().getDataBuffer()).getData();
}
public synchronized void start(){
if(running)
return;
running = true;
thread = new Thread(this);
thread.start();
//System.out.println("working...");
}
public synchronized void stop(){
if(!running)
return;
running = false;
try{
thread.join();
} catch(Exception e){
e.printStackTrace();
System.exit(0);
}
}
public void run(){
while(running){
render();
}
}
private void render(){
BufferStrategy bs = this.getBufferStrategy();
if(bs == null)
{
createBufferStrategy(3);
return;
}
screen.render();
for(int i=0; i<WIDTH*HEIGHT; i++)
{
pixels[i] = screen.pixels[i];
}
Graphics g = bs.getDrawGraphics();
g.drawImage(img, 0, 0, WIDTH, HEIGHT, null);
g.dispose();
bs.show();
}
public static void main(String[] args){
Display game = new Display();
JFrame frame = new JFrame();
frame.add(game);
frame.setTitle(TITLE);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.pack();
frame.setVisible(true);
System.out.println("running ...");
game.start();
}
}
在函数render
In class屏幕中,当我执行以下操作时:
public void render(){
for(int i =0 ; i <width*height;i++){
pixels[i]= Image.floor.pixels[i];
}
test.drawRainbow();
draw(test,0,0);
}
public void render(){
对于(inti=0;i您创建Swing GUI的方法是向后的
这是一个Swing GUI,它显示了来自Internet的6幅图片
下面介绍如何创建Swing GUI
创建一个保存图像信息的GUI模型。我创建了一个ImageInformation类来保存一个图像的信息。我创建了一个ImageInformation列表来保存所有图像
我创建了一个JFrame来保存所有Swing组件
我通过调用SwingUtilities invokeLater方法将Swing组件的创建和使用放在了上。Oracle和我要求您在事件调度线程上启动所有Swing应用程序
我创建了一个图像JPanel来保存图像信息,并创建了一个控制JPanel fpr JRadioButtons
代码如下:
package com.ggl.testing;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import javax.imageio.ImageIO;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;
public class ImageDisplay implements Runnable {
private ItemListener listener;
private JFrame frame;
private JLabel titleLabel;
private JLabel imageLabel;
private JLabel descriptionLabel;
private List<ImageInformation> images;
public static void main(String[] args) {
SwingUtilities.invokeLater(new ImageDisplay());
}
public ImageDisplay() {
this.images = setImageInformation();
}
@Override
public void run() {
frame = new JFrame("Image Display");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(createControlPanel(), BorderLayout.WEST);
frame.add(createImagePanel(), BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
private JPanel createImagePanel() {
JPanel imagePanel = new JPanel();
imagePanel.setLayout(new BorderLayout());
ImageInformation defaultImageInformation = images.get(0);
titleLabel = new JLabel(defaultImageInformation.getTitle());
titleLabel.setHorizontalAlignment(JLabel.CENTER);
imagePanel.add(titleLabel, BorderLayout.NORTH);
imageLabel = new JLabel(new ImageIcon(
defaultImageInformation.getImage()));
JScrollPane scrollPane = new JScrollPane(imageLabel);
imagePanel.add(scrollPane, BorderLayout.CENTER);
descriptionLabel = new JLabel(defaultImageInformation.getDescription());
descriptionLabel.setHorizontalAlignment(JLabel.CENTER);
imagePanel.add(descriptionLabel, BorderLayout.SOUTH);
return imagePanel;
}
private JPanel createControlPanel() {
JPanel panel = new JPanel();
panel.setBorder(new TitledBorder(new EtchedBorder(), "Images"));
panel.setLayout(new GridLayout(0, 1));
ButtonGroup group = new ButtonGroup();
listener = new ImageListener();
for (int i = 0; i < images.size(); i++) {
ImageInformation imageInformation = images.get(i);
JRadioButton button = new JRadioButton(imageInformation.getTitle());
if (i == 0) {
button.setSelected(true);
}
button.addItemListener(listener);
group.add(button);
panel.add(button);
}
return panel;
}
private List<ImageInformation> setImageInformation() {
List<ImageInformation> images = new ArrayList<ImageInformation>();
// Here, you would get your images
Image image1 = getImage("http://4.bp.blogspot.com/-vfRL5DamWFs/"
+ "T2nn6D_EUfI/AAAAAAAABB8/Kc9Y33qYWJo/s1600/People-Power.jpg");
Image image2 = getImage("http://www.jeffjonesillustration.com/images/"
+ "illustration/00601-group-of-people.jpg");
Image image3 = getImage("http://www.careersusa.com/portals/0/BusinessPeopleImage2.png");
Image image4 = getImage("http://www.druginfo.sl.nsw.gov.au/images/teens.jpg");
Image image5 = getImage("http://www.pesconsulting.co.uk/wp-content/uploads/"
+ "2013/03/kevin-thom-2010-people-collage.jpg");
Image image6 = getImage("http://www.emcdda.europa.eu/attachements.cfm/"
+ "att_77302_EN_young-people-480px.jpg");
images.add(new ImageInformation(image1, "Image 1",
"Image 1 Description"));
images.add(new ImageInformation(image2, "Image 2",
"Image 2 Description"));
images.add(new ImageInformation(image3, "Image 3",
"Image 3 Description"));
images.add(new ImageInformation(image4, "Image 4",
"Image 4 Description"));
images.add(new ImageInformation(image5, "Image 5",
"Image 5 Description"));
images.add(new ImageInformation(image6, "Image 6",
"Image 6 Description"));
return images;
}
private Image getImage(String fileName) {
try {
return ImageIO.read(new URL(fileName));
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
private ImageInformation getImageInformation(String title) {
for (ImageInformation imageInformation : images) {
if (title.equals(imageInformation.getTitle())) {
return imageInformation;
}
}
return null;
}
public class ImageListener implements ItemListener {
@Override
public void itemStateChanged(ItemEvent event) {
if (event.getStateChange() == ItemEvent.SELECTED) {
JRadioButton button = (JRadioButton) event.getItem();
String labelText = button.getText();
ImageInformation imageInformation = getImageInformation(labelText);
if (imageInformation != null) {
titleLabel.setText(imageInformation.getTitle());
imageLabel.setIcon(new ImageIcon(imageInformation
.getImage()));
descriptionLabel.setText(imageInformation.getDescription());
}
}
}
}
public class ImageInformation {
private final Image image;
private final String title;
private final String description;
public ImageInformation(Image image, String title, String description) {
this.image = image;
this.title = title;
this.description = description;
}
public Image getImage() {
return image;
}
public String getTitle() {
return title;
}
public String getDescription() {
return description;
}
}
}
package com.ggl.testing;
导入java.awt.BorderLayout;
导入java.awt.GridLayout;
导入java.awt.Image;
导入java.awt.event.ItemEvent;
导入java.awt.event.ItemListener;
导入java.io.IOException;
导入java.net.URL;
导入java.util.ArrayList;
导入java.util.List;
导入javax.imageio.imageio;
导入javax.swing.ButtonGroup;
导入javax.swing.ImageIcon;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.JRadioButton;
导入javax.swing.JScrollPane;
导入javax.swing.SwingUtilities;
导入javax.swing.border.EtchedBorder;
导入javax.swing.border.TitledBorder;
公共类ImageDisplay实现可运行{
私有项侦听器;
私有JFrame;
私人JLabel titleLabel;
专用JLabel图像标签;
私有JLabel描述标签;
私有列表图像;
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(newimagedisplay());
}
公共图像显示(){
this.images=setImageInformation();
}
@凌驾
公开募捐{
帧=新的JFrame(“图像显示”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
添加(createControlPanel(),BorderLayout.WEST);
frame.add(createImagePanel(),BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
私有JPanel createImagePanel(){
JPanel imagePanel=新的JPanel();
setLayout(新的BorderLayout());
ImageInformation defaultImageInformation=images.get(0);
titleLabel=newjlabel(defaultImageInformation.getTitle());
标题标签设置水平对齐(标签中心);
imagePanel.add(标题标签,BorderLayout.NORTH);
imageLabel=新的JLabel(新的ImageIcon(
defaultImageInformation.getImage());
JScrollPane scrollPane=新的JScrollPane(图像标签);
添加(滚动窗格,BorderLayout.CENTER);
descriptionLabel=新的JLabel(defaultImageInformation.getDescription());
描述标签设置水平对齐(JLabel.CENTER);
imagePanel.add(描述标签,BorderLayout.SOUTH);
返回面板;
}
私有JPanel createControlPanel(){
JPanel面板=新的JPanel();
面板.设置顺序(新标题边框(新蚀刻边框(),“图像”);
panel.setLayout(新的GridLayout(0,1));
ButtonGroup=新建ButtonGroup();
listener=新的ImageListener();
对于(int i=0;ipublic class Image {
public static Render floor = loadBitmap("/Images/sample2.jpg");
public static Render loadBitmap(String fileName){
try{
BufferedImage image = ImageIO.read(Image.class.getResource(fileName));
int width = image.getWidth();
int height = image.getHeight();
Render result = new Render(width, height);
image.getRGB(0, 0, width, height, result.pixels, 0 ,width);
return result;
}catch(Exception e){
System.out.println("crash");
throw new RuntimeException(e);
}
}
}
public void render(){
for(int i =0 ; i <width*height;i++){
pixels[i]= Image.floor.pixels[i];
}
test.drawRainbow();
draw(test,0,0);
}
package com.ggl.testing;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import javax.imageio.ImageIO;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;
public class ImageDisplay implements Runnable {
private ItemListener listener;
private JFrame frame;
private JLabel titleLabel;
private JLabel imageLabel;
private JLabel descriptionLabel;
private List<ImageInformation> images;
public static void main(String[] args) {
SwingUtilities.invokeLater(new ImageDisplay());
}
public ImageDisplay() {
this.images = setImageInformation();
}
@Override
public void run() {
frame = new JFrame("Image Display");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(createControlPanel(), BorderLayout.WEST);
frame.add(createImagePanel(), BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
private JPanel createImagePanel() {
JPanel imagePanel = new JPanel();
imagePanel.setLayout(new BorderLayout());
ImageInformation defaultImageInformation = images.get(0);
titleLabel = new JLabel(defaultImageInformation.getTitle());
titleLabel.setHorizontalAlignment(JLabel.CENTER);
imagePanel.add(titleLabel, BorderLayout.NORTH);
imageLabel = new JLabel(new ImageIcon(
defaultImageInformation.getImage()));
JScrollPane scrollPane = new JScrollPane(imageLabel);
imagePanel.add(scrollPane, BorderLayout.CENTER);
descriptionLabel = new JLabel(defaultImageInformation.getDescription());
descriptionLabel.setHorizontalAlignment(JLabel.CENTER);
imagePanel.add(descriptionLabel, BorderLayout.SOUTH);
return imagePanel;
}
private JPanel createControlPanel() {
JPanel panel = new JPanel();
panel.setBorder(new TitledBorder(new EtchedBorder(), "Images"));
panel.setLayout(new GridLayout(0, 1));
ButtonGroup group = new ButtonGroup();
listener = new ImageListener();
for (int i = 0; i < images.size(); i++) {
ImageInformation imageInformation = images.get(i);
JRadioButton button = new JRadioButton(imageInformation.getTitle());
if (i == 0) {
button.setSelected(true);
}
button.addItemListener(listener);
group.add(button);
panel.add(button);
}
return panel;
}
private List<ImageInformation> setImageInformation() {
List<ImageInformation> images = new ArrayList<ImageInformation>();
// Here, you would get your images
Image image1 = getImage("http://4.bp.blogspot.com/-vfRL5DamWFs/"
+ "T2nn6D_EUfI/AAAAAAAABB8/Kc9Y33qYWJo/s1600/People-Power.jpg");
Image image2 = getImage("http://www.jeffjonesillustration.com/images/"
+ "illustration/00601-group-of-people.jpg");
Image image3 = getImage("http://www.careersusa.com/portals/0/BusinessPeopleImage2.png");
Image image4 = getImage("http://www.druginfo.sl.nsw.gov.au/images/teens.jpg");
Image image5 = getImage("http://www.pesconsulting.co.uk/wp-content/uploads/"
+ "2013/03/kevin-thom-2010-people-collage.jpg");
Image image6 = getImage("http://www.emcdda.europa.eu/attachements.cfm/"
+ "att_77302_EN_young-people-480px.jpg");
images.add(new ImageInformation(image1, "Image 1",
"Image 1 Description"));
images.add(new ImageInformation(image2, "Image 2",
"Image 2 Description"));
images.add(new ImageInformation(image3, "Image 3",
"Image 3 Description"));
images.add(new ImageInformation(image4, "Image 4",
"Image 4 Description"));
images.add(new ImageInformation(image5, "Image 5",
"Image 5 Description"));
images.add(new ImageInformation(image6, "Image 6",
"Image 6 Description"));
return images;
}
private Image getImage(String fileName) {
try {
return ImageIO.read(new URL(fileName));
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
private ImageInformation getImageInformation(String title) {
for (ImageInformation imageInformation : images) {
if (title.equals(imageInformation.getTitle())) {
return imageInformation;
}
}
return null;
}
public class ImageListener implements ItemListener {
@Override
public void itemStateChanged(ItemEvent event) {
if (event.getStateChange() == ItemEvent.SELECTED) {
JRadioButton button = (JRadioButton) event.getItem();
String labelText = button.getText();
ImageInformation imageInformation = getImageInformation(labelText);
if (imageInformation != null) {
titleLabel.setText(imageInformation.getTitle());
imageLabel.setIcon(new ImageIcon(imageInformation
.getImage()));
descriptionLabel.setText(imageInformation.getDescription());
}
}
}
}
public class ImageInformation {
private final Image image;
private final String title;
private final String description;
public ImageInformation(Image image, String title, String description) {
this.image = image;
this.title = title;
this.description = description;
}
public Image getImage() {
return image;
}
public String getTitle() {
return title;
}
public String getDescription() {
return description;
}
}
}