[英]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.