2

私は 2 を持っています。それぞれJPanelsに独自のクラスがあり、JpanelそれぞれがjDialog. クラスの1つにクリックイベントを配置し、クリックが発生した時点で色を取得します。JPanelでは、2 番目に自分自身を再描画するように指示するにはどうすればよいでしょうか。

私のjDialogのコンストラクタ:

public ColorPickerDialog(java.awt.Frame parent, boolean modal){
    super(parent, modal);
    initComponents();

    cpp = new ColorPicker();
    cpp.setBounds(5, 5, 300, 300);
    cpp.setVisible(true);
    cpp.setOpaque(true);
    cpp.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
    add(cpp);

    // Click event is in this class:
    ColorSlider colorSlide = new ColorSlider();
    colorSlide.setBounds(315, 5, 20, 300);
    colorSlide.setVisible(true);
    colorSlide.setOpaque(true);
    colorSlide.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
    add(colorSlide);
}

マイ クリック イベント:

public void mouseClick(MouseEvent evt){
    Point pt = evt.getPoint();

    BufferedImage img = (BufferedImage)this.createImage(getWidth(), getHeight());
    int[] colors = new int[3];
    img.getRaster().getPixel(evt.getX(), evt.getY(), colors);
    ColorPickerDialog.sldColor = new Color(colors[0], colors[1], colors[2]);
}
4

2 に答える 2

2

プロジェクトに Factory パターンを使用します。2nd を作成または開始するときはJPanel、オブジェクトのインスタンスを含む Factory に追加します。mouseClickに、工場から 2 番目のパネルを呼び出して実装します。 panel.repaint();

いくつかの例:

 public void mouseClick(MouseEvent evt){
....
 SecondPanel panel = PanelFactory.loadPanel(2);

    panel.revalidate();
    panel.repaint();    
    ....

}




public class PanelFactory{

  private static PanelFactory instance = new PanelFactory();  

  private JPanel mSomePanel = null;

  public static void storePanel(JPanel panel){
     instance.mSomePanel = panel;
  }

   public static JPanel loadPanel(int index){
     ......
     return instance.mSomePanel;

    }
}
于 2012-12-07T23:31:55.480 に答える
2

JPanel の 1 つは Observer で、もう 1 つは Observable です。次に、更新が必要な場合は、次のように呼び出します。

setChanged();
notifyObservers();

Observable JPanelで。

于 2012-12-07T23:34:04.840 に答える