gpt4 book ai didi

java - 尝试覆盖/替换 JPanel

转载 作者:行者123 更新时间:2023-12-02 04:41:04 24 4
gpt4 key购买 nike

为了显示一系列图像,我在 Activity 监听器方法中创建一个全新的 JPanel,然后将该面板发送到另一个方法以添加图像。这非常有效,除非我再次点击“搜索”并需要一组全新的图像。我得到了新面板,但旧面板存在于其下方,因此它们只是堆叠在一起,而不是用新面板替换旧面板。

我尝试在 Activity 监听器最开始的位置分配一个空白面板,但这似乎不起作用。 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;

}

最佳答案

仅创建一个面板并使用 CardLayout CardLayout tutorial

它就像一副纸牌。您可以按名称添加卡片、显示最后一张卡片以及删除卡片(如果涉及许多图像)。

欲了解更多信息,请查看此处:Cardlayout doc

关于java - 尝试覆盖/替换 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30174681/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com