লেআউট বরাদ্দ করার সময় ত্রুটি: বক্সলআউট ভাগ করা যায় না


114

আমার এই জাভা JFrameক্লাস রয়েছে, যাতে আমি একটি বক্সলেআউট ব্যবহার করতে চাই, তবে আমি বলার মধ্যে একটি ত্রুটি পেয়েছি java.awt.AWTError: BoxLayout can't be shared। আমি অন্যকে এই সমস্যাটি দেখেছি, তবে তারা বিষয়বস্তুতে বক্সলেআউট তৈরি করে এটি সমাধান করেছে, তবে আমি এখানে যা করছি। আমার কোডটি এখানে:

class EditDialog extends JFrame {
    JTextField title = new JTextField();
    public editDialog() {
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        setTitle("New entity");
        getContentPane().setLayout(
            new BoxLayout(this, BoxLayout.PAGE_AXIS));
        add(title);
        pack();
        setVisible(true);
    }
}

উত্তর:


173

আপনার সমস্যাটি হ'ল আপনি BoxLayoutএকটি JFrame( this) এর জন্য একটি তৈরি করছেন তবে এটি JPanel( getContentPane()) এর বিন্যাস হিসাবে সেট করছেন setting চেষ্টা করুন:

getContentPane().setLayout(
    new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS)
);

5
হ্যাঁ, তবে এটি সরিয়ে ফেললে বিষয়টি বিভ্রান্ত হবে, এখন তাই না?
মাইকেল ম্যাইইয়ার্স

75

এটি তৈরি করতে এই ত্রুটিটিও পেয়েছি:

JPanel panel = new JPanel(new BoxLayout(panel, BoxLayout.PAGE_AXIS));

জ্যাকানেলটি বক্সলআউটটিতে যাওয়ার সময় এখনও আরম্ভ করা হয়নি। সুতরাং এই লাইনটি এভাবে ভাগ করুন:

JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));

এটি কাজ করবে।


16

আমি মনে করি যে পূর্ববর্তী উত্তরগুলি থেকে হাইলাইট করার জন্য একটি গুরুত্বপূর্ণ বিষয় হ'ল বক্সলয়েটের লক্ষ্য (প্রথম প্যারামিটার) একই কনটেইনার হওয়া উচিত যা সেটলয়েট পদ্ধতিটি নিম্নলিখিত উদাহরণ হিসাবে বলা হচ্ছে:

JPanel XXXXXXXXX = new JPanel();
XXXXXXXXX.setLayout(new BoxLayout(XXXXXXXXX, BoxLayout.Y_AXIS));

5

আপনি যদি এই জাতীয় লেআউটটি ব্যবহার করেন JFrame:

JFrame frame = new JFrame();
frame.setLayout(new BoxLayout(frame, BoxLayout.Y_AXIS));
frame.add(new JLabel("Hello World!"));

নিয়ন্ত্রণ আসলে যোগ করা হচ্ছে ContentPaneতাই এটি এটা মধ্যে 'ভাগ' দেখতে কেমন হবে JFrameএবংContentPane

পরিবর্তে এটি করুন:

JFrame frame = new JFrame();
frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS));
frame.add(new JLabel("Hello World!"));

ডাং তুমি আমাকে বাঁচিয়েছিলে - কেন এটিই একমাত্র উত্তর যা getContentPane () এর উল্লেখ করেছে?
আলেকজান্ডার ম্যাকএন্ট্রি

@ আলেকজান্ডারএমসিএনটিসি, সম্ভবত কারণ JFrameএটির সাধারণত প্রয়োজন হয় না ( এডাব্লুটি- র মত নয় Frame)। JFrameডকুমেন্টেশন থেকে : তারা একটি উদাহরণের উল্লেখ করছেন As a convenience, the add, remove, and setLayout methods of this class are overridden, so that they delegate calls to the corresponding methods of the ContentPane. For example, you can add a child component to a frame as follows: frame.add(child); And the child will be added to the contentPane. The content pane will always be non-null. By frameJFrame
আলিফ

@ আলেকজান্ডারএমসিএনটিসি, আরও একটি জে ফ্রেমে কেবল একটি সামগ্রী প্যান রয়েছে এবং এটি সর্বদা সেখানে থাকার গ্যারান্টিযুক্ত।
আলিফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.