इससे पहले कि मैं उस पर होवर करूं दूसरा बटन दिखाई नहीं दे रहा है।

मुझे पता है कि जेपीनेल के लिए इस सवाल पर जवाब दिया गया है, लेकिन वे मेरे लिए काम नहीं कर रहे हैं।

मेरे पास निम्न कोड है:

मुख्य वर्ग

public class Main {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            Window w = new Window();
        });
    }
}

मेरी कस्टम विंडो

public class Window implements ActionListener {

    JFrame f;
    JButton b1, b2;
    JRootPane jRootPane;

    public Window() {
        f = new JFrame("Ceaser Verschluesselung");
        f.setPreferredSize(new Dimension(480, 150));
        f.setResizable(false);
        f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        f.setLocation(720, 300);
        f.setLayout(null);
        jRootPane = f.getRootPane();

        b1 = new JButton("Verschlüsseln");
        b2 = new JButton("Entschlüsseln");
        b1.setSize(new Dimension(220, 100));
        b1.setLocation(7, 5);
        b1.setFont(new Font("1", Font.BOLD, 25));
        b1.addActionListener(this);
        b2.setSize(new Dimension(220, 100));
        b2.setLocation(237, 5);
        b2.setFont(new Font("1", Font.BOLD, 25));
        b2.addActionListener(this);
        jRootPane.add(b1);
        jRootPane.add(b2);

        f.pack();
        f.setVisible(true);
    }

    public void setVisibility(boolean b) {
        f.setVisible(b);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equals("Verschlüsseln")) {
            new Encoder(this);
        } else if (e.getActionCommand().equals("Entschlüsseln")) {
            new Decoder();
        }
    }
}

मेरे पास पहले अन्य परियोजनाओं पर यह समस्या थी लेकिन विंडो को चलाने के लिए SwingUtilities.invokeLater() ने इसे ठीक कर दिया। जेपीनेल के साथ दूसरे धागे पर मुझे पता चला कि बटन गायब होने पर गायब हो जाते हैं लेकिन मैंने इसे और अधिक संकीर्ण बटनों के साथ करने की कोशिश की जो कुछ भी नहीं बदला।

मैं एन्कोडर और डिकोडर कक्षाएं नहीं जोड़ता, मुझे नहीं लगता कि यह तब तक जरूरी है जब तक कोई मुझे गलत साबित न करे: डी

0
Max pm 18 मार्च 2020, 18:31

1 उत्तर

सबसे बढ़िया उत्तर

पढ़ें रूटपैन्स का उपयोग कैसे करें। आपको RootPane में घटकों को नहीं जोड़ना चाहिए। इसके बजाय, आपको उन्हें सामग्री फलक में जोड़ना चाहिए:

Container contentPane;
//....
contentPane = f.getContentPane();

पूरी कक्षा:

public class Window implements ActionListener {

    JFrame f;
    JButton b1, b2;
    Container contentPane;

    public Window() {
        f = new JFrame("Ceaser Verschluesselung");
        f.setPreferredSize(new Dimension(480, 150));
        f.setResizable(false);
        f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        f.setLocation(720, 300);
        f.setLayout(null);
        contentPane = f.getContentPane();

        b1 = new JButton("Verschlüsseln");
        b2 = new JButton("Entschlüsseln");
        b1.setSize(new Dimension(220, 100));
        b1.setLocation(7, 5);
        b1.setFont(new Font("1", Font.BOLD, 25));
        b1.addActionListener(this);
        b2.setSize(new Dimension(220, 100));
        b2.setLocation(237, 5);
        b2.setFont(new Font("1", Font.BOLD, 25));
        b2.addActionListener(this);
        contentPane.add(b1);
        contentPane.add(b2);

        f.pack();
        f.setVisible(true);
    }

    public void setVisibility(boolean b) {
        f.setVisible(b);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equals("Verschlüsseln")) {

        } else if (e.getActionCommand().equals("Entschlüsseln")) {
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new Window());
    }
}

साथ ही, setLayout(null) का उपयोग करना बुरा (बुरा) अभ्यास है। इसके बजाय लेआउट मैनेजर का इस्तेमाल करें। यह आपके जीवन को आसान बना देगा, साथ ही आपका जीयूआई अधिक उपयोगकर्ता के अनुकूल होगा क्योंकि यह आकार बदलने का समर्थन करेगा।

2
George Z. 18 मार्च 2020, 19:07