代碼非常簡單。我從一個數組列表中得到一個URL字符串。然後我試圖在我的JPanel中繪製圖像。如果我沒有在代碼中初始化一個佈局,它會返回一個錯誤。如果我初始化佈局,則沒有錯誤,但該圖標也不顯示。我錯過了什麼嗎?謝謝!圖片圖標不顯示在JPanel中
public class CharacterPage extends JFrame {
private JPanel imagesPanel;
private WikiDB wikiDB;
public CharacterPage(WikiDB db) throws IOException {
super("Character Page");
setContentPane(rootPanel);
pack();
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setVisible(true);
setSize(new Dimension(500,500));
imagesPanel.setLayout(new BorderLayout());
this.wikiDB = db;
searchButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
ArrayList<String> characterImages =
wikiDB.searchImages(characterID);
//array contains this string: http://cosplayidol.otakuhouse.com/wp-content/uploads/2012/06/s-1-1.jpg
for (int x = 0; x < characterImages.size(); x++){
String imageURL = characterImages.get(x);
Graphics g = getGraphics();
try {
URL url = new URL(imageURL);
//icon.paintIcon(imagesPanel,g,300,100);
JLabel wIcon = new JLabel(new ImageIcon(url));
imagesPanel.setVisible(true);
imagesPanel.add(wIcon);
} catch (MalformedURLException mue){
mue.printStackTrace();
}
}
});
}
下面是我用來閱讀我的URL的單獨程序。使用下面的代碼,我可以閱讀我的URL而不會返回任何錯誤,但它仍然不會顯示在GUI中。
public class SimpleGUI extends JFrame {
private JPanel imagesPanel;
public SimpleGUI() throws IOException {
super("GUI Page");
setContentPane(imagesPanel);
pack();
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setVisible(true);
setSize(new Dimension(500, 500));
imagesPanel.setLayout(new GridLayout());
BufferedImage img1 = null;
try
{
URL url1 = new URL("http://cosplayidol.otakuhouse.com/wp-content/uploads/2012/06/s-1-1.jpg");
URLConnection conn1 = url1.openConnection();
conn1.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");
InputStream in1 = conn1.getInputStream();
img1 = ImageIO.read(in1);
} catch (IOException e)
{
e.printStackTrace();
}
JLabel wIcon = new JLabel(new ImageIcon(img1));
imagesPanel.add(wIcon);
}
}
編輯:我正在在接近我現在可以彈出使用此代碼包含圖片的獨立的框架:
public class SimpleGUI extends JFrame {
private JPanel imagesPanel;
private JFrame mainFrame;
public SimpleGUI() throws IOException {
super("GUI Page");
setContentPane(imagesPanel);
pack();
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(new Dimension(500, 500));
mainFrame = new JFrame();
imagesPanel.setLayout(new GridLayout());
imagesPanel.setBounds(0,0,200,200);
mainFrame.add(imagesPanel);
mainFrame.setVisible(true);
我似乎無法找到我的GUI原始幀窗體,所以我可以添加imagesPanel來代替。我正在使用IntelliJ的GUI表單構建器。
您需要調試 - 根本不需要讀取圖像工作嗎?創建一個簡單的GUI,其中一個讀入Image(使用'ImageIO.read(URL url)'),創建一個ImageIcon並在JOptionPane中顯示該圖標。如果這有效,那麼問題在別處。如果它不能糾正URL地址。 –
嗨Hovercraft,我能夠創建一個簡單的程序,糾正讀取和顯示圖片,但我不能以原始的GUI形式/框架顯示;我必須創建一個新的。我用新代碼編輯了我的問題。有任何想法嗎?謝謝! – Michelle
Michelle,新代碼只顯示您在新窗口中顯示圖片。直到您提煉出原始程序之前,我無法確定您的問題是什麼。最好爲你嘗試創建併發布[最小代碼示例](http://sscce.org)。 –