سؤال

هذا يجعلني غاضبًا جدًا ، لقد عملت على هذا لمدة يومين ، ولدي كتابين مفتوحين ونظرت من خلالهما ، وما زلت لا أستطيع الحصول على هذا البرنامج لتشغيل الطريقة التي أريد تشغيلها. أصل إلى النقطة التي إذا لم يساعد ذلك ، فأنا استقال.

أريد تطبيق إطار بسيط. لديها jCombobox تركز في الأعلى. بجانبه ، يوجد حقل نص كبير بما يكفي لإظهار أرقام رقمية مثل "49.99 دولارًا" أدناه ، يوجد مكان لمنطقة نصية تُظهر شروط الخدمة أدناه وهي مربع الاختيار الذي يوافق على شروط الخدمة أدناه ، وهما الأزران "قبول" و "التراجع"

لقد عملت على هذا لمدة يومين ، وهنا الترميز:

public class Bar extends JFrame implements ActionListener
{
    public Bar(final JFrame frame)
    {
        String[] tests = { "A+ Certification", "Network+ Certification", "Security+ Certification", "CIT Full Test Package" };
        JButton button = new JButton("Click Meh");
        add(new JLabel("Welcome to the CIT Test Program "));
        add(new JLabel("Please select which Test Package from the list below."));
        frame.setVisible(true);
        frame.setSize(250,250);
        JPanel pane1 = new JPanel(new FlowLayout());
        JPanel pane2 = new JPanel(new FlowLayout());

        JMenuBar menuBar = new JMenuBar();
        JMenu fileMenu = new JMenu("File");
        JMenu editMenu = new JMenu("Edit");
        JMenu helpMenu = new JMenu("Help");
        menuBar.add(fileMenu);
        menuBar.add(editMenu);
        menuBar.add(helpMenu);
        JMenuItem newMenu = new JMenuItem("New  (Ctrl+N)");
        JMenuItem openMenu = new JMenuItem("Open  (Ctrl+O)");
        JMenuItem saveMenu = new JMenuItem("Save  (Ctrl+S)");
        saveMenu.addActionListener(this);
        JMenuItem exitMenu = new JMenuItem("Exit  (Ctrl+W)");
        JMenuItem cutMenu = new JMenuItem("Cut  (Ctrl+X)");
        JMenuItem copyMenu = new JMenuItem("Copy  (Ctrl+C)");
        JMenuItem pasteMenu = new JMenuItem("Paste  (Ctrl+V)");
        JMenuItem infoMenu = new JMenuItem("Help  (Ctrl+H)");
        fileMenu.add(newMenu);
        fileMenu.add(openMenu);
        fileMenu.add(saveMenu);
        fileMenu.add(exitMenu);
        editMenu.add(cutMenu);
        editMenu.add(copyMenu);
        editMenu.add(pasteMenu);
        helpMenu.add(infoMenu);
        frame.setJMenuBar(menuBar);
        JComboBox packageChoice =  new JComboBox(tests);
        frame.add(packageChoice);


    }

     public void actionPerformed(ActionEvent e)
  {
  Object source = e.getSource();
  {
  }

}

تحرير: نسيت إضافة البرنامج الثاني

public class JFrameWithPanel
{
    public static void main(String[] args)
    {
         JPanel panel = new Bar(new JFrame("CIT Test Program"));
    }
}

كيف أحصل على هذا للحصول على كل ما أريده وأظهر؟ أنا في حيرة من أمري بسبب هذا ، والآن بالكاد أحصل على كيفية عمل الإطارات.

هل كانت مفيدة؟

المحلول

يجب وضع مكونات في التأرجح في ترتيب معين.

تبدأ مع JFrame. المكونات الوحيدة التي يتم وضعها في JFrame هي Jmenubar و JPanel. لا تضيف أي مكونات أخرى في JFrame. يمكنك إضافة مكونات في jpanel.

فيما يلي رمز نيك ، الذي أعيد تنظيمه لتحديد المكونات بالترتيب الصحيح. لقد استخدمت GridLayout لأنه كان أسرع. يجب عليك استخدام Gridbaglayout ، كما قال Nivas.

public class Bar {

    private static final long serialVersionUID = 1L;

    public Bar(final JFrame frame) {
        JMenuBar menuBar = buildMenuBar();
        frame.setJMenuBar(menuBar);

        JPanel masterPanel = new JPanel(new GridLayout(2, 1));

        JPanel pane1 = new JPanel(new GridLayout(3, 1));
        pane1.add(new JLabel("Welcome to the CIT Test Program "));
        pane1.add(new JLabel("Please select which Test Package from the list below."));
        JButton button = new JButton("Click Me");
        pane1.add(button);

        JPanel pane2 = new JPanel(new GridLayout(1, 1));
        String[] tests = { "A+ Certification", "Network+ Certification",
                "Security+ Certification", "CIT Full Test Package" };
        JComboBox packageChoice = new JComboBox(tests);
        pane2.add(packageChoice);

        masterPanel.add(pane1);
        masterPanel.add(pane2);

        frame.add(masterPanel);
        frame.pack();

        frame.setVisible(true);
//      frame.setSize(250, 250);

    }

    public JMenuBar buildMenuBar() {
        JMenuBar menuBar = new JMenuBar();
        JMenu fileMenu = new JMenu("File");
        JMenu editMenu = new JMenu("Edit");
        JMenu helpMenu = new JMenu("Help");
        menuBar.add(fileMenu);
        menuBar.add(editMenu);
        menuBar.add(helpMenu);
        JMenuItem newMenu = new JMenuItem("New  (Ctrl+N)");
        JMenuItem openMenu = new JMenuItem("Open  (Ctrl+O)");
        JMenuItem saveMenu = new JMenuItem("Save  (Ctrl+S)");
        saveMenu.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub

            }
        });
        JMenuItem exitMenu = new JMenuItem("Exit  (Ctrl+W)");
        JMenuItem cutMenu = new JMenuItem("Cut  (Ctrl+X)");
        JMenuItem copyMenu = new JMenuItem("Copy  (Ctrl+C)");
        JMenuItem pasteMenu = new JMenuItem("Paste  (Ctrl+V)");
        JMenuItem infoMenu = new JMenuItem("Help  (Ctrl+H)");
        fileMenu.add(newMenu);
        fileMenu.add(openMenu);
        fileMenu.add(saveMenu);
        fileMenu.add(exitMenu);
        editMenu.add(cutMenu);
        editMenu.add(copyMenu);
        editMenu.add(pasteMenu);
        helpMenu.add(infoMenu);
        return menuBar;
    }
}

لقد نقلت رمز Jmenubar إلى طريقته الخاصة ، لذلك ، نأمل أن يكون الفهم بقية الكود أسهل.

لديّ jpanel الرئيسي ، حيث تتم إضافة جميع المكونات الأخرى.

لقد استخدمت jpanel آخر لعقد اثنين من Jlabels و Jbutton.

لقد استخدمت JPanel الثالث لعقد JCombobox.

النمط الأساسي هو كما يلي:

  • تحديد jpanel.
  • تحديد المكونات.
  • أضف المكونات إلى jpanel.
  • أضف jpanel إلى Master Jpanel
  • أضف Master jpanel إلى JFrame.

نصائح أخرى

نيك. أعتقد أن أول شيء عليك مسحه هو معرفة ما تريده بالضبط.

لقد ساعدتك في هذا السؤال https: //stackoverflow.com/questions/3055777/how-to -....

من ما تصفه لديك بالفعل ما تحتاجه. ما المشكلة في ذلك:

alt text

لذلك ، أعتقد حقًا أنك يجب أن تصف بوضوح ما تريد ، من أجل الحصول عليه.

سوف نساعدك ، ولكن عليك أن تحدد بوضوح ماهية مشكلتك.

1. لن يتجمع برنامجك الثاني. أنت تحاول تعيين JFrame إلى JPanel.

كان ينبغي ان يكون

 JFrame frame = new Bar(new JFrame("CIT Test Program")); 

2. إنها تعمل. ما تريد هناك. ولكن ليس كما تريد ، لأنك لم تخبر جافا كيف تريد عرضها. حاول استخدام LayoutManager مثل Gridbaglayout.

إذا كنت في عجلة من أمرك لإنشاء واجهة المستخدم الرسومية ، جرب IDE مثل NetBeans التي تجعل عملك أسهل من خلال السحب والإسقاط.

تعديل:

مثال:

public class TestN extends JFrame
{
    private JLabel label ;
    private JComboBox combo;
    private JButton button;
    public TestN()
    {
        label = new JLabel("Label:");
        combo = new JComboBox();
        combo.addItem("Item 1");
        combo.addItem("Item 2");
        combo.addItem("Item 3");

        setLayout(new GridBagLayout());

        GridBagConstraints c1 = new GridBagConstraints();
        c1.gridx = 0;
        c1.gridy = 0;
        c1.weightx = 1;
        c1.weighty = 1;
        add(label, c1);

        GridBagConstraints c2 = new GridBagConstraints();
        c2.gridx = 1;
        c2.gridy = 0;
        c2.weightx = 1;
        c2.weighty = 1;
        add(combo, c2);

        button = new JButton("Ok");
        GridBagConstraints c3 = new GridBagConstraints();
        c3.gridx = 2;
        c3.gridy = 0;
        c3.weightx = 1;
        c3.weighty = 1;
        add(button, c3);

        setTitle("Test");
        setSize(200,100);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    public static void main(String[] args)
    {
        new TestN();
    }
}

إخلاء المسئولية: هذا مثال أساسي فقط لإعطاء مثال. ليس من المفترض أن يكون رمز الإنتاج ؛-)

عندك:

public class Bar extends JFrame implements ActionListener
{
    public Bar(final JFrame frame)
    {
        String[] tests = { "A+ Certification", "Network+ Certification", "Security+ Certification", "CIT Full Test Package" };
        JButton button = new JButton("Click Meh");
        add(new JLabel("Welcome to the CIT Test Program "));
        add(new JLabel("Please select which Test Package from the list below."));
        frame.setVisible(true);
        frame.setSize(250,250);

كل Bar الكائن يرث من JFrame (أي أ Bar هدف هو نوع من JFrame) لكنك تمر بشكل مختلف JFrame كائن ( frame المعلمة) في المنشئ. ثم تسمي بعض الطرق على Bar كائن - مثل إضافة الاثنين JLabel الكائنات - وبعضها على تمريره JFrame - مثل ال setVisible و setSize طُرق.

لذلك لديك اثنان مختلفان JFrame الكائنات وأنت تقوم ببعض الأعمال لكل منهم ، ومن غير ذلك أن يكون واحدًا منهم فقط مرئيًا.

يبدو كما هو السبب الوحيد الذي تمر فيه في JFrame إلى المُنشئ هو تعيين عنوان النافذة. إذا مررت في String مع عنوان إلى Bar مُنشئ ثم اتصل super(title); كخط أول من Bar ثم لن تحتاج إلى تمرير JFrame على الاطلاق

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top