2

我有 2 JPanels,每个都有自己的类扩展Jpanel每个都在一个jDialog. 我在其中一个类中放置了一个点击事件,然后在点击发生的位置获取颜色。现在我怎么能告诉第二个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]);
}
4

2 回答 2

2

其中一个 JPanel 可以是 Observer,另一个可以是 Observable。然后,当您需要更新时,您只需调用:

setChanged();
notifyObservers();

在您的 Observable JPanel 中。

于 2012-12-07T23:34:04.840 回答
2

为您的项目使用工厂模式。创建或启动 2ndJPanel时,将其添加到包含对象实例的工厂。进入 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;

    }
}
于 2012-12-07T23:31:55.480 回答