为了显示一系列图像,我在我的主动侦听器方法中创建一个全新的JPanel,然后将该面板发送到另一个方法来添加图像。这很有效,除非我再次点击“搜索”并需要一组全新的图像。我得到了新的面板,但旧的面板存在于其下面,因此代替New Panel取代Old Panel,它们只是堆叠。
我尝试在活动侦听器的最开头为该位置分配一个空白面板,但这似乎不起作用。 panel.removeAll()不起作用,因为我每次都在创建一个新的imagesPanel。有没有人有什么建议?谢谢!
searchButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String searchString = searchText.getText();
if (searchDropList.getSelectedItem().equals(character)) {
ArrayList<Character> characterDetails = wikiDB.searchCharacter(searchString);
if (characterDetails.size() == 0) {
//Do other stuff
} else {
editCharacterButton.setVisible(true);
for (int i = 0; i < characterDetails.size(); i++) {
characterID = characterDetails.get(i).getCharacterID();
}
ArrayList<String> characterImages = wikiDB.searchImages(characterID);
JPanel imagesPanel = displayImages(characterImages, c);
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 0;
c.gridy = 6;
rootPanel.add(imagesPanel, c);
rootPanel.repaint();
setContentPane(rootPanel);
pack();
setVisible(true);
System.out.println("Repainting.");
}
}
}
});
private JPanel displayImages(ArrayList<String> characterImages, GridBagConstraints c){
BufferedImage img1 = null;
JPanel imagesPanel = new JPanel();
imagesPanel.setLayout(new GridBagLayout());
for (int x = 0; x < characterImages.size(); x++) {
String imageURL = characterImages.get(x);
try {
URL url1 = new URL(imageURL);
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 ioe) {
ioe.printStackTrace();
}
if (img1 != null) {
//target size is no bigger than 100 x 100
int w;
int h;
if (img1.getWidth() > img1.getHeight()) {
//if the source was wider than it was tall, make the width 100,
w = 100;
//and scale the height accordingly
h = (int) ((double) img1.getHeight() / img1.getWidth() * 100.0);
} else {
//otherwise, vice versa (and if w == h, then they are both 100)
h = 100;
int myH = img1.getHeight();
int myW = img1.getWidth();
w = (int) ((double) img1.getWidth() / img1.getHeight() * 100.0);
w= w*3;
h = h*3;
}
BufferedImage img2 = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = img2.createGraphics();
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g2.drawImage(img1, 0, 0, w, h, null);
g2.dispose();
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = x%4;
c.gridy = x/4;
Border b1 = new BevelBorder(
BevelBorder.LOWERED, Color.LIGHT_GRAY, Color.DARK_GRAY);
Border b2 = new LineBorder(Color.GRAY, 12);
Border bTemp = new CompoundBorder(b1,b2);
JLabel cIcon = new JLabel(new ImageIcon(img2));
cIcon.setBorder(bTemp);
imagesPanel.add(cIcon, c);
}
}
return imagesPanel;
}
答案 0 :(得分:2)
只创建一个Panel并使用CardLayout CardLayout tutorial
就像一副纸牌。您可以按名称添加卡片,显示最后一张卡片并删除卡片,如果它将是许多图像。
有关详细信息,请点击此处:Cardlayout doc