gpt4 book ai didi

java - 在循环定义的 jpanel 中重绘 jlabel 并在循环中声明 jpanels

转载 作者:行者123 更新时间:2023-12-01 15:02:17 27 4
gpt4 key购买 nike

为了好玩,我一直致力于开发这个简单的股票图表 GUI,它从 YahooFinance 获取图表并将它们显示到选项卡式 Jpanel 中。我已经能够让选项卡填充用户定义的股票等。然而,我开发了一些按钮,允许人们查询不同的图表方面(boll band、移动平均线等),并且希望能够使用此更新图表“重绘”面板。

问题:我不确定如何访问通过以下方法创建的各个面板。我需要能够选择一个面板(例如下面 i=1 时创建的 panel1)并在 ActionListener 中更新它。我真的只是想知道 Java 如何在循环中定义这些面板,以便我稍后可以访问它们并重新绘制标签!干杯。

 public static void urlstock(String options,final String[] s, final JFrame f,final      
JTabbedPane tpane) throws IOException{

for(int i=0;i<s.length;i++){

String path = "http://chart.finance.yahoo.com/z?s="+s[i]+options;

URL url = new URL(path);

BufferedImage image = ImageIO.read(url);

JLabel label = new JLabel(new ImageIcon(image));

JPanel panel=new JPanel();

tpane.addTab(s[i],null, panel);

panel.add(label);

}

所以我尝试过在按下按钮时提示,但它不起作用,因为它无法将 panel 识别为变量,原因超出了我的理解:

   public void actionPerformed(ActionEvent e)
{ //Execute when button is pressed
System.out.println("MAButton");
tpane.getComponentAt(1);
tpane.remove(panel);
//Container.remove();

String path = "http://chart.finance.yahoo.com/z?s=GOOG&t=7m&z=l&q=l&a=ss,sfs";

URL url = new URL(path);

BufferedImage image = ImageIO.read(url);

JLabel label = new JLabel(new ImageIcon(image));
JPanel panel=new JPanel();

tpane.setComponentAt(1,panel);
panel.add(label);
}

最佳答案

已更新示例

public class TestTabPane {

public static void main(String[] args) {
new TestTabPane();
}

public TestTabPane() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}

final JTabbedPane tabPane = new JTabbedPane();

JPanel panel = new JPanel();
JButton updateButton = new JButton("Update me");
panel.add(updateButton);
updateButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int indexOfTab = tabPane.indexOfTab("Testing");
JPanel panel = (JPanel) tabPane.getComponentAt(indexOfTab);
panel.removeAll();
panel.add(new JLabel("I've begin updated"));
panel.repaint();
}
});

tabPane.addTab("Testing", panel);

JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(tabPane);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}

}

关于java - 在循环定义的 jpanel 中重绘 jlabel 并在循环中声明 jpanels,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13465608/

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