स्विंग घटकों के बीच बातचीत कैसे करें, जो विभिन्न वर्गों में हैं?

मेरे पास बहुत से घटकों के साथ एक जटिल जीयूआई है (जेबटन, जेलाबेल, जेसीम्बोबॉक्स, जेएसपीनर, आदि)। यही कारण है कि मुझे इसे कई वर्गों में विभाजित करना है (जेननेल में घटकों को जोड़ें, यह जेपीनल बड़े जेपीनल में जोड़ते हैं, यह जेपीनल जेटीबैडपेन में जोड़ते हैं, और जेटीएबबेडपेन जेएफआरएएम में जोड़ते हैं)। उपयोगकर्ता choises पर निर्भर करता है और डेटा को कुछ घटकों को सक्षम या अक्षम कर देता है या कुछ मान प्राप्त करता है और संपादन योग्य नहीं होता है (एक शब्द - इंटरैक्ट में)। यह करना आसान है और ठीक से काम करता है, अगर घटक (जो इंटरैक्ट हैं) एक ही कक्षा में हैं, लेकिन यदि केवल यह अलग-अलग वर्गों में हैं - कोई परिणाम ... एएए !!!

मैंने जो कुछ चाहिए उसे समझाने के लिए मैंने सरल उदाहरण बनाया। चार वर्ग हैं। सबसे पहले जेएफआरएएम बनाएं और जेटीबैडपेन जोड़ें:

public class MainFrame extends JFrame {

MainFrame() {
    super("MainFrame");
    go();
}

public void go() {
    Tabs tabs = new Tabs();
    getContentPane().add(tabs);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(500, 300);
    setVisible(true);
}

public static void main(String[] args) {
    MainFrame frame = new MainFrame();
}

}

दूसरी कक्षा JTabbedPane बनाती है और टैब के रूप में दो जेपीनल जोड़ती है। दूसरा टैब .setEnabledAt (1, झूठा):

public class Tabs extends JTabbedPane {

public Tabs() {
    go();
}

public void go() {
    TabData data = new TabData();
    add("  Data  ", data);
    TabCalculation calculation = new TabCalculation();
    add("Calculation", calculation);
    setEnabledAt(1, false);
}

}

तीसरी कक्षा जेकंबेल के साथ जेपीनेल बनाते हैं:

public class TabData extends JPanel {

public TabData() {
    go();
}

JComboBox someData; 

public void go() {      
    String type[] = { "    ", "Type 1", "Type 2", "Type 3" };
    someData = new JComboBox(type);
    add(someData);
    someData.addActionListener(new DataListener());
}

public class DataListener implements ActionListener {

    public void actionPerformed(ActionEvent ev) {           
        if (someData.getSelectedIndex() > 0) {
            Tabs tabs = new Tabs();
            tabs.setEnabledAt(1, true);
        }
    }
}

}

... and fourth class create some JPanel. Second tab with this JPanel disabled. When user set some value in JComboBox (selectedIndex>0) - tab have to enabled. But Tabs tabs = new Tabs(); tabs.setEnabledAt(1, true); didn't help...

मैं उसे कैसे कर सकता हूँ? कृपया सहायता कीजिए!!! मैं सो नहीं सकता ... मैं काम नहीं कर सकता ... मैं हमेशा इसके बारे में सोचता हूं और समाधान खोजने की कोशिश करता हूं ...

0
आपको या तो किसी प्रकार का मॉडल स्थापित करने की आवश्यकता है कि प्रत्येक घटक समूह परिवर्तन के लिए बात कर सकता है और पर्यवेक्षक हो सकता है और/या किसी प्रकार का पर्यवेक्षक पैटर्न स्थापित कर सकता है जो आपको अलग-अलग समूहों पर किसी प्रकार का कॉलबैक/श्रोता पंजीकृत करने और वहां परिवर्तनों का जवाब देने की अनुमति देता है जैसी जरूरत थी...
जोड़ा लेखक MadProgrammer, स्रोत
हमें चौथी कक्षा दिखाओ। और इस तरह कक्षा को पोस्ट करने के बजाय, अपनी सभी कक्षाओं को एकल फ़ाइल में रखें और इसके SSCCE बनाएं जो चलने योग्य है, संकलित करने योग्य और आपकी समस्या का पुन: उत्पादन करने में सक्षम। आपका पोस्ट कोड ज्यादा समझ नहीं ले रहा है
जोड़ा लेखक Sage, स्रोत

1 उत्तर

When user set some value in JComboBox (selectedIndex>0) - tab have to enabled.

यदि आपको इन सभी वर्गों को विभाजित करने की आवश्यकता है, तो मैं सुझाव दूंगा कि आप अपनी तीसरी कक्षा में यह परिवर्तन करें:

public class TabData extends JPanel {

    JComboBox someData;

    ...

   //Get rid of DataListener class and add this public method instead:
    public void addActionListenerToComboBox(ActionListener listener) {
        someData.addActionListener(listener);
    }
}

और अपनी दूसरी कक्षा में यह परिवर्तन करें:

public class Tabs extends JTabbedPane {

    public Tabs() {
        go();
    }

    public void go() {
        TabData data = new TabData();           
        data.addActionListenerToComboBox(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JComboBox comboBox = (JComboBox)e.getSource();
                boolean enableSecondTab = comboBox.getSelectedIndex() > -1;
                setEnabledAt(1, enableSecondTab);
            }

        });
        add("  Data  ", data);
        TabCalculation calculation = new TabCalculation();
        add("Calculation", calculation);
        setEnabledAt(1, false);
    }
}

EventObject.getSource पर एक नज़र डालें() अधिक जानकारी के लिए javadoc।

0
जोड़ा
आपके लिए बहुत सारे धन्यवाद। तुम मुझे वापस जीवन में लाओ।
जोड़ा लेखक user3033810, स्रोत