提供されたコードには、JFrame とそれに対応する JPanel 拡張機能が含まれています。 JPanel の repaint() メソッドが繰り返し呼び出されている間、paintComponent() メソッドの実行に失敗します。このため、imageDimension オブジェクトが問題の原因である可能性があるという疑いが生じています。
提供されたコンテキストはバイト配列を明示的に参照していませんが、目的は、グレースケールのサムネイルを作成し、コンポーネントのアイコンに割り当てることであるようです。以下のサンプル コードは、既存のサンプル アイコンをグレースケールに変換し、setIcon() を使用してコンポーネントを更新するメソッドを提供します。このアプローチは、どの画像にも適用できます。
前述のグレースケール変換は、ColorConvertOp を使用するか、アイコンではなくコンポーネント自体を更新することによって実現できることに注目してください。
import java.awt.*;<br>import javax.swing.*;</p> <p>public class IconExample {</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">public static void main(String[] args) { // Create a list of icons List<Icon> icons = new ArrayList<>(); icons.add(new ImageIcon("image1.png")); icons.add(new ImageIcon("image2.png")); // Create a panel to hold the icons JPanel panel = new JPanel(); panel.setLayout(new GridLayout(1, icons.size())); // Add the icons to the panel for (Icon icon : icons) { panel.add(new JLabel(icon)); } // Create a frame for the panel JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(300, 300); frame.add(panel); // Make the frame visible frame.setVisible(true); // Create a timer to update the icons Timer timer = new Timer(1000, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // Shuffle the icons Collections.shuffle(icons); // Update the icons in the panel for (int i = 0; i < icons.size(); i++) { panel.getComponent(i).setIcon(icons.get(i)); } // Repaint the panel panel.repaint(); } }); // Start the timer timer.start(); }
}
この例は、Collections.shuffle アイコンの順序をランダム化し、パネル内のアイコンを毎秒更新します。 repaint() メソッドにより、変更が画面上に確実に表示され、アイコンが継続的に更新されます。
この代替アプローチを提供することで、問題がに関連していることを示します。 PaintComponent() メソッドは、imageDimension オブジェクトとは無関係である可能性があり、代わりに、グラフィックスと画像処理の特定の実装に由来します。元のコード。
以上がrepaint()を使用しているにもかかわらず、拡張JPanelのpaintComponent()メソッドが呼び出されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。