0

同様の質問がありますが、私が抱えている問題は具体的です。

私が持っているのは、3 つのボタンを持つシンプルな jFrame です。いずれかのボタンを押すと、曲の BPM が計算されます。また、StringBuilder オブジェクトを編集して、画像の URL パスを作成します。出力のこの部分は問題ありません。これは、印刷時の私のコンソール出力です。

104.9      //Bpm of Song
One        //String representation of first char in array
Zero       //String representation of Second char in array
Four       //String representation of Third char in array
Nine       //String representation of Fifth char in array
res/1.png  // 
res/0.png  // New Url paths
res/4.png  //
res/9.png  //

私が抱えている問題はコードにあります。

JButton tapButton = new JButton("Tap");
    tapButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {

            MathFunctions.tapBPM();
            ArrayComparison.stringCharArrays();

            String urlLocationOne = (ArrayComparison.urlLocationOneBuild.toString());
            String urlLocationTwo = (ArrayComparison.urlLocationTwoBuild.toString());
            String urlLocationThree = (ArrayComparison.urlLocationThreeBuild.toString());
            String urlLocationFive = (ArrayComparison.urlLocationFiveBuild.toString());

        }
    });
    tapButton.setBounds(100, 150, 120, 45);
    contentPane.add(tapButton);

urlLocation[number]Build は StringBuilder オブジェクトです。クリックするたびに、テンプレートの URL をチェックし、番号を削除して置き換えます (このビットは正常に動作することがわかっています)。問題は画像にあります。ロードされないtapButton ActionEventで新しい画像を作成すると、独自のJLabel(ボタンの外側)として画像を作成する必要があります

(これが JLabel のコードです (これらは 5 つあり、1 つだけを示します))

JLabel locationOne = new JLabel("Image 1");
locationOne.setBackground(Color.WHITE); 
locationOne.setIcon(new ImageIcon(urlLocationOne));   //urlLocationOne not available outside of button
locationOne.setBounds(84, 38, 66, 100);
contentPane.add(locationOne);

そのため、imageIcon がボタン内で作成された場合は機能しません。ボタンの外で作成された場合、それは「urlLocationOne」の範囲外であり、フィールドを作成した場合、タップ ボタン内でのみ変化する不変の文字列を作成します。そして、tapButton メソッドの外で呼び出されると、元の文字列が表示されます。クリックするたびに画像のパスが変化するように画像を配置する最良の方法は何ですか。(パスが変更されていることを思い出してください。ImageIcon JLabel で変更を「聞く」ことができません。)

4

1 に答える 1

0

OK、図を描く問題と多くのストレスに2日間耐えた後、答えはぐっすり眠ることから得られたように見えました. そしてここにあります

final JLabel locationOne = new JLabel("Image 1");
    locationOne.setBackground(Color.WHITE);
    tapButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
    String urlLocationOne = (ArrayComparison.urlLocationOneBuild.toString());
    locationOne.setIcon(new ImageIcon(urlLocationOne));
        }
    });
    locationOne.setBounds(84, 38, 66, 100);
    contentPane.add(locationOne);

なんらかの理由で機能しないリターンとナンセンスを使用して、別のメソッドで作成された文字列にアクセスしようとするのではなく。Image の jLabel 内に新しいアクション リスナーを作成しました。これは同じボタンをリッスンしましたが、アクションは 1 つだけでした - 文字列をローカルに作成します。(後から考えるととても論理的に見えます!!!!!!)

于 2013-09-28T06:51:17.860 に答える