0

そこで、趣味として、この単純な株価チャート GUI の開発に取り組んできました。この GUI は、YahooFinance からチャートを取得し、それらをタブ付きの JPanel に表示します。タブにユーザー定義の株式などを入力することができました。ただし、さまざまなチャートの側面 (ボール バンド、移動平均など) を照会できるいくつかのボタンを開発し、この更新チャートでパネルを「再描画」できるようにしたいと考えています。

問題: 以下の方法で作成した個々のパネルにアクセスする方法がわかりません。パネル (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);
    }
4

1 に答える 1

1

例で更新

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);
            }
        });
    }

}
于 2012-11-20T02:51:57.410 に答える