簡體   English   中英

一個JPanel中的Click事件更新另一個JPanel

[英]Click Event In One JPanel That Updates Another JPanel

我有2個JPanels ,每個都有其自己的類擴展Jpanel每個都在一個jDialog 我在其中一個類中放置了click事件,然后在發生單擊的位置獲取顏色。 現在如何告訴第二個JPanel重新繪制自身?

我的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]);
}

為您的項目使用Factory模式。 創建或啟動2nd JPanel ,將其添加到包含對象實例的Factory中。 進入mouseClick ,從工廠調用第二個面板並實現: 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;

    }
}

JPanel的其中一個可以是觀察者,另一個可以是可觀察者。 然后,當您需要更新時,只需致電:

setChanged();
notifyObservers();

在您的Observable JPanel中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM