2

基本的に、ユーザーがファイルを選択できるようにするGUIを作成しています。このファイルは.wavファイルであることが確認されています。次に、このファイルのデータがJFreechartによってグラフ化されます。Jfreechart によって作成されたこのグラフまたは画像は、JFrame に入れたいと考えています。問題は、コードが次のとおりであることです。

 ImageIcon myIcon1 = new ImageIcon("blah.jpg");   
 JLabel graphLabel1 = new JLabel(myIcon1);
 southContent.add(graphLabel1);

JFrameを作成するメソッドで作成および宣言する必要があります(フレームに追加する必要があります)。したがって、ユーザーが選択したファイルに応じて、新しく作成されたグラフに画像を動的に更新できません。(新しいファイルを選択すると、ボタンで新しいグラフ イメージが作成されます)

強制する方法はありますか

  ImageIcon myIcon1 = new ImageIcon("blah.jpg");   
  JLabel graphLabel1 = new JLabel(myIcon1);
  southContent.add(graphLabel1);

新しいイメージに更新する (同じディレクトリ内で、同じ名前で)

または、マッピングを使用して画像名 (「blah.jpg」) をカウンターで動的に設定する方法はありますか?

ここに私のSSCCEがあります

public class gui extends JFrame {

    ImageIcon myIcon1 = new ImageIcon("C:/location/chart1.jpg");
    JLabel graphLabel1 = new JLabel(myIcon1);

    gui() {
        // create Pane + contents & listeners...
        JPanel content = new JPanel();
        JPanel southContent = new JPanel();
        content.setLayout(new FlowLayout());
        content.add(open_File);
        // Jfreechart graph image  -- not visible until selected
        graphLabel1.setVisible(false);
        // this is the graph image being added to the panel
        southContent.add(graphLabel1);
        southContent.setLayout(new FlowLayout());
        // add action listeners to buttons
        open_File.addActionListener(new OpenAction());
        // set Pane allignments & size...
        this.setContentPane(content);
        this.add(southContent, BorderLayout.SOUTH);
        this.setTitle("Count Words");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(1100, 720);
        this.setLocationRelativeTo(null);
    }

    //  opening selected file directory.
    class OpenAction implements ActionListener {

        public void actionPerformed(ActionEvent ae) {
            /// gets user selection ( file ) and procesess .wav data into array
            /// loops through array creating X series for JfreeChart
            // Add the series "series" to data set "dataset"
            dataset.addSeries(series);
            // create the graph
            JFreeChart chart = ChartFactory.createXYLineChart(
                    ".Wav files", // Graph Title
                    "Bytes", // X axis name
                    "Frequency", // Y axis name
                    dataset, // Dataset
                    PlotOrientation.VERTICAL, // Plot orientation
                    true, // Show Legend
                    true, // tooltips
                    false // generate URLs?
                    );
            try {
                ChartUtilities.saveChartAsJPEG(
                        new File("C:/location/chart1.jpg"), chart, 1000, 600);
            } catch (IOException e) {
                System.err.println("Error occured:  " + e + "");
            }
            // !!!!! this is where i need to set the ImageIcon added to the 
            //  panel in "gui" to this new created Graph image ("chart1.jpg") 
            //  as above
            //  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            // sets the image label itself to visible as a new image has been
            // added ot it
            graphLabel1.setVisible(true);
        }
    }
}
4

3 に答える 3

3

JLabel通常どおり、コンテナに を追加するだけです。次に、イメージを作成して のインスタンスを取得したら、 のメソッドをImageIcon呼び出すだけです。setIcon()JLabel

于 2012-10-02T07:19:06.543 に答える
1

DanAndrew Thompsonのおかげで、私は実用的な製品を手に入れました。

「OpenAction」ボタンが選択された時間を教えるためにカウント変数を使用しました。次に、この変数を使用して、 JFreechartで作成した各画像に動的な名前を付けました。したがって、.setIcon を使用して、アイコン イメージを新しい名前で新しく作成された各イメージにリセットしました。以前に選択した画像アイコンと同じ名前の画像アイコンにラベルをリセットしようとすると、.setIcon が機能しないようです。

完成したコード セグメントは次のようになります。

ImageIcon myIcon1 = new ImageIcon("C:/location/chart"+CounterVariable+".png");
graphLabel1.setIcon(myIcon1);

たとえば、これはチャートを作成します。chart1 chart2 chart3 など。

于 2012-10-02T12:25:01.627 に答える