Как установить значок в JLabel из изображения из папки?
Я пытаюсь установить значок в JLabel из папки изображений всякий раз, когда элемент выбран из JComboBox. Имя элементов в JComboBox и имя изображений в папке совпадают. Поэтому всякий раз, когда элемент выбирается из JComboBox, соответствующее изображение с тем же именем должно быть установлено в качестве значка для JLabel. Я пытаюсь сделать что-то подобное.
private void cmb_movieselectPopupMenuWillBecomeInvisible(javax.swing.event.PopupMenuEvent evt){
updateLabel(cmb_moviename.getSelectedItem().toString());
}
protected void updateLabel(String name) {
ImageIcon icon = createImageIcon("C:Usersxerof_000Picturestmspictures" + name + ".jpg");
if(icon != null){
Image img = icon.getImage();
Image newimg = img.getScaledInstance(lbl_pic.getWidth(), lbl_pic.getHeight(), java.awt.Image.SCALE_SMOOTH);
icon = new ImageIcon(newimg);
lbl_pic.setIcon(icon);
lbl_pic.setText(null);
}
else{
lbl_pic.setText("Image not found");
lbl_pic.setIcon(null);
}
}
protected static ImageIcon createImageIcon(String path) {
URL imgURL;
imgURL = NowShowing.class.getResource(path);
if (imgURL != null) {
return new ImageIcon(imgURL);
} else {
return null;
}
}
Я думал, проблема в "C:Usersxerof_000Picturestmspictures" я пытался использовать "C:/Users/xerof_000/Pictures/tmspictures/" но даже это не получилось. И что бы я ни делал, это показывает только "изображение не найдено" на JLabel.
4 ответов
это моя структура каталогов:
packageexample
|
-------------------------------------------
| | |
build(folder) src(folder) manifest.txt
| |
swing(package) ComboExample.java
|
imagetest(subpackage)
|
ComboExample.class + related .class files
это контент ComboExample.java:
package swing.imagetest;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import javax.swing.*;
public class ComboExample {
private String[] data = new String[]{
"geek0",
"geek1",
"geek2",
"geek3",
"geek4"
};
private String MESSAGE = "No Image to display yet...";
private JLabel imageLabel;
private JComboBox cBox;
private ActionListener comboActions =
new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
JComboBox combo = (JComboBox) ae.getSource();
ImageIcon image = new ImageIcon(
getClass().getResource(
"/" + combo.getSelectedItem() + ".gif"));
if (image != null) {
imageLabel.setIcon(image);
imageLabel.setText("");
} else {
imageLabel.setText(MESSAGE);
}
}
};
private void displayGUI() {
JFrame frame = new JFrame("Combo Example");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JPanel contentPane = new JPanel();
imageLabel = new JLabel(MESSAGE, JLabel.CENTER);
cBox = new JComboBox(data);
cBox.addActionListener(comboActions);
contentPane.add(imageLabel);
contentPane.add(cBox);
frame.setContentPane(contentPane);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String... args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new ComboExample().displayGUI();
}
});
}
}
ТЕПЕРЬ КОМПИЛЯЦИЯ:
для компиляции я сделал это :
Gagandeep Bali@LAPTOP ~/c/Mine/JAVA/J2SE/src/packageexample
$ javac -d build src/*.java
содержимое файла манифеста:
создание файла JAR:
Gagandeep Bali@LAPTOP ~/c/Mine/JAVA/J2SE/src/packageexample
$ cd build
Gagandeep Bali@LAPTOP ~/c/Mine/JAVA/J2SE/src/packageexample/build
$ jar -cfm imagecombo.jar ../manifest.txt *
Теперь возьмите это JAR File
в любое место имея эти изображения (, , , и ), и запустить JAR File
и видим результаты :-)
Как говорится в как использовать иконки на getResource()
метод ожидает найти изображение в файле JAR вашей программы. Вам нужно переместить изображение в проект. IconDemo
полный пример.
поскольку вы используете jLabel, вы можете просто использовать HTML-теги, просто начните текст метки с и используйте HTML-теги в метке, как хотите, в случае тура : U может использовать это для замены :). С улыбкой значок.
/*
Create an Image File whose size is 700 x 472 (pixels) in any image editor.
Here Image was created using MS - Paint.
Make sure that the Image File and the main file are in the same folder.
The size of the JFrame should be set to 700 x 472 (pixels) in the program.
Set the JLabel's IconImage.
Add the JLabel to the JFrame.
Set JFrame properties.
Display JFrame.
------------------------------------------------------------------------------
label.setIcon(getClass().getResources(String name));
label.setIcon(new ImageIcon(String file));
These 2 methods, don't always work with us.
So, we create a method "getImageIcon(File f)" that returns a new ImageIcon Object,
everytime a new File Object is passed to it.
*/
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JButton;
import java.awt.Image;
import javax.imageio.ImageIO;
import java.io.File;
import java.io.IOException;
import javax.swing.ImageIcon;
import static javax.swing.WindowConstants.*;
public class ImageDemo
{
JFrame frame = new JFrame(); //initialized
JLabel label = new JLabel(); //initialized
JButton button = new JButton(); //initialized
ImageIcon ii; //not initialized
public void displayImage()
{
//Layout Type: Null Layout.
label.setIcon(getImageIcon(new File("print.png")));
button.setBounds(150,150,358,66);
//Note that sizes of the Image and Button are same.
button.setIcon(getImageIcon(new File("Button.png")));
label.add(button);
//add the button to the label
frame.add(label);
frame.setBounds(300, 50, 700, 472);
//(300 x 50 = HorizontalAlignment x VerticalAlignment)
//(700 x 472 = Width x Height)
frame.setTitle("Image Demo");
frame.setDefaultCloseOperation(EXIT_ON_CLOSE); //WindowConstants.EXIT_ON_CLOSE
frame.setVisible(true);
}
public ImageIcon getImageIcon(File f)
{
try
{
Image im = ImageIO.read(f);
ii = new ImageIcon(im);
}
catch(IOException i)
{
i.printStackTrace();
}
finally
{
return ii;
}
}
public static void main(String[] args)
{
ImageDemo id = new ImageDemo();
id.displayImage();
}
}