दिलचस्प पोस्ट
आइवी एक निर्भरता को हल करने में विफल रहता है, कारण खोजने में असमर्थ अजाक्स का उपयोग करके पीडीएफ फाईल को डाउनलोड और खोलें छात्रों को इंटरफेस समझाते हुए जावा संकलन स्पीले बनाम गति संकलन गैर-गतिविधि से startActivityForResult का उपयोग करें MySQL किसी फ़ील्ड में कुछ पाठ को खोज और प्रतिस्थापित करता है आईटेक्शशहर लाइसेंस IE डाउनलोड फ़ाइल ओरेकल में "यह एक नंबर है" फ़ंक्शन में जांचें PHP का उपयोग कर फ़ाइल डाउनलोड करने पर मजबूर होना रूबी में `ए = ए“ नील` क्यों है? अगर इस संपत्ति को व्युत्पन्न वर्ग में ओवरराइट किया जा रहा है, तो आधार वर्ग की संपत्ति कैसे बुलाएं? GITHub पर README.md पर चित्र जोड़ें UIFextField में स्विफ्ट जोड़ें आइकन / इमेज क्या व्यूपोर्ट मेटा टैग वास्तव में आवश्यक है?

दो जेपीनल ऑब्जेक्ट्स के बीच संदेश भेजना

मेरे पास जावा जेफ्रेम है जिसमें जेपीएनएल है I उस जेपीनल के भीतर, दो अलग जेपीनल हैं जब उपयोगकर्ता पहले जेपीएनएल में एक बटन पर क्लिक करता है, तो संदेश को अन्य जेपीएनएल को भेजे जाने की आवश्यकता होती है जो उस बटन पर क्लिक किया गया था। इस तरह के ऑब्जेक्ट्स के बीच संदेश भेजने का सबसे आसान तरीका क्या है?

Solutions Collecting From Web of "दो जेपीनल ऑब्जेक्ट्स के बीच संदेश भेजना"

मैकेबेल (और मूल पोस्टर) के लिए:
मैं जो सिफारिश कर रहा हूं वह कमजोर युग्मन है, एक जेपीएनएल को अन्य जेपीनल का कोई ज्ञान नहीं है और यह कि सभी कनेक्शन किसी प्रकार के नियंत्रण के माध्यम से किया जाता है। उदाहरण के लिए, अपना कुछ कोड उधार लेने के लिए:

CopyTextNorthPanel2.java

import java.awt.*; import javax.swing.*; public class CopyTextNorthPanel2 extends JPanel { private static final long serialVersionUID = 1L; public JTextField northField; public CopyTextNorthPanel2() { northField = new JTextField("Welcome World"); northField.setFont(new Font("Serif", Font.BOLD, 20)); northField.setPreferredSize(new Dimension(300, 25)); add(northField); } public String getNorthFieldText() { return northField.getText(); } } 

CopyTextSouthPanel2.java

 import java.awt.event.*; import javax.swing.*; public class CopyTextSouthPanel2 extends JPanel { private static final long serialVersionUID = 1L; private JTextField firstText = new JTextField("Desired TextField"); private JButton copyButton = new JButton("Copy text from JTextFields"); private CopyTextControl2 control; public CopyTextSouthPanel2() { copyButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (control != null) { control.copyAction(); } } }); add(firstText); add(copyButton); } public void setControl(CopyTextControl2 control) { this.control = control; } public void setFirstText(String text) { firstText.setText(text); } } 

CopyTextControl2.java

 public class CopyTextControl2 { private CopyTextNorthPanel2 northPanel; private CopyTextSouthPanel2 southPanel; public void copyAction() { if (northPanel != null && southPanel != null) { southPanel.setFirstText(northPanel.getNorthFieldText()); } } public void setNorthPanel(CopyTextNorthPanel2 northPanel) { this.northPanel = northPanel; } public void setSouthPanel(CopyTextSouthPanel2 southPanel) { this.southPanel = southPanel; } } 

CopyText2.java

 import java.awt.*; import javax.swing.*; public class CopyText2 { private static void createAndShowUI() { CopyTextNorthPanel2 northPanel = new CopyTextNorthPanel2(); CopyTextSouthPanel2 southPanel = new CopyTextSouthPanel2(); CopyTextControl2 control = new CopyTextControl2(); southPanel.setControl(control); control.setNorthPanel(northPanel); control.setSouthPanel(southPanel); JPanel mainPanel = new JPanel(new BorderLayout()); mainPanel.add(northPanel, BorderLayout.NORTH); mainPanel.add(Box.createRigidArea(new Dimension(100, 100)), BorderLayout.CENTER); mainPanel.add(southPanel, BorderLayout.SOUTH); JFrame frame = new JFrame("Copy Text"); frame.getContentPane().add(mainPanel); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } public static void main(String[] args) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { createAndShowUI(); } }); } } 

आप एक कस्टम इवेंट बना सकते हैं, और इसे एक या अधिक श्रोताओं को जोड़ सकते हैं।

लागू करने का सही तरीका है कि बटन एक्शनलिस्टनर को इस घटना को आग लगा दें और उसके बाद आपके दो पैनल उस घटना के लिए श्रोताओं हो।

आपकी कक्षा के शीर्ष पर

 public MyClass implements ActionListener { ... myButton.addActionListener(this); ... public void actionPerformed(ActionEvent e) { //for example if you have more than one events that you need to handle if(e.getSource().equals(myButton) { //update your do some work on you jpanels } } 

लेकिन वास्तव में, मुझे लगता है कि डिजाइन पैटर्न के बारे में सोचना शुरू करने का समय है आप जो वर्णन कर रहे हैं वह पर्यवेक्षक पैटर्न के लिए सही उम्मीदवार है और संभवतः कमांड पैटर्न

उदाहरण के लिए कन्स्ट्रक्टर बीटवेन्स क्लासेस का उपयोग करके या (डीबगिंग इश्यू के लिए) निकालने के लिए वांछित getParent() एस) से getParent() का उपयोग करके

 import java.awt.*; import javax.swing.*; public class CopyTextFrame extends JFrame { private static final long serialVersionUID = 1L; private CopyTextNorthPanel northPanel; private CopyTextCenterPanel centerPanel; private CopyTextSouthPanel southPanel; public void makeUI() { northPanel = new CopyTextNorthPanel(); centerPanel = new CopyTextCenterPanel(); southPanel = new CopyTextSouthPanel(); northPanel.setName("northPanel"); centerPanel.setName("centerPanel"); southPanel.setName("southPanel"); centerPanel = new CopyTextCenterPanel(); centerPanel.setPreferredSize(new Dimension(300, 40)); southPanel = new CopyTextSouthPanel(); southPanel.setSourceTextField(northPanel.desText); northPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1)); centerPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1)); southPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1)); setLayout(new BorderLayout(5, 5)); setDefaultCloseOperation(EXIT_ON_CLOSE); add(northPanel, BorderLayout.NORTH); add(centerPanel, BorderLayout.CENTER); add(southPanel, BorderLayout.SOUTH); pack(); setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new CopyTextFrame().makeUI(); } }); } } 

+

 import javax.swing.*; public class CopyTextCenterPanel extends JPanel { private static final long serialVersionUID = 1L; public CopyTextCenterPanel() { } } 

+

 import java.awt.*; import javax.swing.*; public class CopyTextNorthPanel extends JPanel { private static final long serialVersionUID = 1L; public JTextField desText; public CopyTextNorthPanel() { desText = new JTextField("Welcome World"); desText.setFont(new Font("Serif", Font.BOLD, 20)); desText.setPreferredSize(new Dimension(300, 25)); desText.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1)); desText.addComponentListener(null); desText.setName("desText"); add(desText); } public JTextField getDesText() { return desText; } } 

+

 import java.awt.*; import java.awt.event.ActionEvent; import javax.swing.*; public class CopyTextSouthPanel extends JPanel { private static final long serialVersionUID = 1L; private JTextField firstText; private JButton copyButton; private JTextField sourceTextField; private String lds = ""; public CopyTextSouthPanel() { firstText = new JTextField("Desired TextField"); firstText.setMinimumSize(new Dimension(300, 25)); firstText.setPreferredSize(new Dimension(300, 25)); firstText.setMaximumSize(new Dimension(300, 25)); copyButton = new JButton("Copy text from JTextFields"); copyButton.setMinimumSize(new Dimension(200, 25)); copyButton.setPreferredSize(new Dimension(200, 25)); copyButton.setMaximumSize(new Dimension(200, 25)); copyButton.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent evt) { copyButtonActionPerformed(evt); } private void copyButtonActionPerformed(ActionEvent evt) { System.out.print("Button pressed" + "\n"); Component[] comp = CopyTextSouthPanel.this.getParent().getComponents(); int nO = comp.length; for (int i = 0; i < comp.length; ++i) { if (comp[i] instanceof JPanel) { String name = ((JPanel) comp[i]).getName(); if (name.equals("northPanel")) { JPanel panel = (JPanel) comp[i]; Component[] comp1 = panel.getComponents(); int nO1 = comp1.length; for (int ii = 0; ii < comp1.length; ++ii) { if (comp1[ii] instanceof JTextField) { String name1 = ((JTextField) comp1[ii]).getName(); if (!(name1 == null)) { if (name1.equals("desText")) { JTextField text = (JTextField) comp1[ii]; String str = text.getText(); firstText.setText(str); System.out.print("set value -> " + str + "\n"); break; } } } } break; } } } lds = sourceTextField.getText(); if (lds != null || (!(lds.isEmpty()))) { firstText.setText(" Msg -> " + lds); } } }); add(firstText, BorderLayout.EAST); add(copyButton, BorderLayout.WEST); } public void setSourceTextField(JTextField source) { this.sourceTextField = source; } }