2016-02-14 3 views
-1

Я знаю, как кодировать Java, но у меня много проблем с этим. Я создал строку меню, но я хочу поставить под ним разделенную панель. Меню в порядке, но разделенная панель дает мне много ошибок, и я не знаю, как это исправить.Java GUI - панель меню и панель разделения

Любая помощь будет высоко оценена.

package getcodinggui; 

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.JMenu; 
import javax.swing.JMenuItem; 
import javax.swing.JMenuBar; 

import javax.swing.JPanel; 
import javax.swing.JTextArea; 
import javax.swing.JScrollPane; 
import javax.swing.JFrame; 
import javax.swing.JSplitPane; 
import javax.swing.SwingUtilities; 


public class GetCodingGUI { 
    JTextArea output; 
    JScrollPane scrollPane; 

    public JMenuBar createMenuBar() { 
     JMenuBar menuBar; 
     JMenu menu; 

     menuBar = new JMenuBar(); 

     menu = new JMenu("Home"); 
     menu.setMnemonic(KeyEvent.VK_A); 
     menu.getAccessibleContext().setAccessibleDescription(
       "File Menu Items"); 
     menuBar.add(menu); 

     menu = new JMenu("About"); 
     menu.setMnemonic(KeyEvent.VK_N); 
     menu.getAccessibleContext().setAccessibleDescription(
       "Edit Menu Items"); 
     menuBar.add(menu); 

     menu = new JMenu("Contact Us"); 
     menu.setMnemonic(KeyEvent.VK_N); 
     menu.getAccessibleContext().setAccessibleDescription(
       "Edit Menu Items"); 
     menuBar.add(menu); 

     menu = new JMenu("FAQ"); 
     menu.setMnemonic(KeyEvent.VK_N); 
     menu.getAccessibleContext().setAccessibleDescription(
       "Edit Menu Items"); 
     menuBar.add(menu); 

     menu = new JMenu("Log In"); 
     menu.setMnemonic(KeyEvent.VK_N); 
     menu.getAccessibleContext().setAccessibleDescription(
       "Edit Menu Items"); 
     menuBar.add(menu); 

     return menuBar; 
    } 


    public Container createContentPane() { 
     //Create the content-pane-to-be. 
     JPanel contentPane = new JPanel(new BorderLayout()); 
     contentPane.setOpaque(true); 


     //Create a scrolled text area. 
     output = new JTextArea(5, 30); 
     output.setEditable(false); 
     scrollPane = new JScrollPane(output); 

     //Add the text area to the content pane. 
     contentPane.add(scrollPane, BorderLayout.CENTER); 

     return contentPane; 
    } 

    private static void createAndShowGUI() { 
     //Create and set up the window. 
     JFrame frame = new JFrame("Example"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     public static class MyJFrameWin extends JFrame{ 

     JSplitPane jSplitPane, jSplitPane2; 
     JPanel jPanel1, jPanel2a, jPanel2b; 

     jPanel1 = new JPanel(); 
      jPanel2a = new JPanel(); 
      jPanel2b = new JPanel(); 

      jSplitPane2 = new JSplitPane(JSplitPane.VERTICAL_SPLIT, 
        jPanel2a, jPanel2b); 
      jSplitPane2.setOneTouchExpandable(true); 
      jSplitPane2.setDividerLocation(100); 

      jSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, 
        jPanel1, jSplitPane2); 
      jSplitPane.setOneTouchExpandable(true); 
      jSplitPane.setDividerLocation(150); 

      getContentPane().add(jSplitPane); 
     } 
} 


     //Create and set up the content pane. 
     GetCodingGUI demo = new GetCodingGUI(); 
     frame.setJMenuBar(demo.createMenuBar()); 
     frame.setContentPane(demo.createContentPane()); 

     //Display the window. 
     frame.setSize(1280, 720); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(runJSplitPaneLater); 
} 

     javax.swing.SwingUtilities.invokeLater(new Runnable, runJSplitPaneLater() 

{ 
     static Runnable runJSplitPaneLater = new Runnable(){ 
      @Override 
     public void run() { 
      MyJFrameWin myJFrameWin = new MyJFrameWin(); 
      myJFrameWin.setVisible(true); 
       createAndShowGUI(); 
      } 
     }); 


    } 
} 
+1

«много ошибок» - пожалуйста, включают ошибки в вашем посте – RAnders00

+0

'«много ошибок»' - это говорит о том, что ваш стиль кодирования должен быть исправлено. Не вводите большой код и затем проверяйте его. Вместо этого, если вы не можете использовать современную среду IDE, такую ​​как NetBeans или Eclipse (которая почти сразу предупреждает вас о проблемах с компиляцией), вам нужно заранее составить код ** и часто **, а самое главное ** не добавлять новый код до тех пор, пока не будут исправлены текущие проблемы компиляции **. Иначе у вас будет крыло с жесткими исправлениями. –

+0

Да, я знаю, что я сказал, что ошибки извиняются. Я закодировал его в NetBeans, но я не понял, что происходит ... –

ответ

1

Мне пришлось очистить 20 ошибок компиляции.

Вот GUI, который я создал.

Split Pane Example

Вот изменения, которые я сделал.

  1. Я переписал весь ваш код. Код намного легче понять, когда он читает сверху вниз.

  2. Поскольку для метода SwingUtilities invokeLater требуется Runnable, я сделал ваш класс представления GUI реализуемым Runnable.

  3. Я разместил ваше содержимое в одном из JSplitPanes. Я просто догадался, в какой области.

  4. Я положил внешний JSplitPane в JFrame.

  5. Я исправил ваши клавиши меню alt.

  6. Я вернул JPanel из вашего метода createContentPane.

  7. Я отформатировал ваш код.

  8. Я уменьшил размер вашего JFrame, чтобы он поместился на моем экране.

Вот код:

package com.ggl.testing; 

import java.awt.BorderLayout; 
import java.awt.event.KeyEvent; 

import javax.swing.JFrame; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JSplitPane; 
import javax.swing.JTextArea; 
import javax.swing.SwingUtilities; 

public class GetCodingGUI implements Runnable { 
    private JTextArea output; 
    private JScrollPane scrollPane; 

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

    @Override 
    public void run() { 
     // Create and set up the window. 
     JFrame frame = new JFrame("Example"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JSplitPane jSplitPane, jSplitPane2; 
     JPanel jPanel1, jPanel2a, jPanel2b; 

     jPanel1 = new JPanel(); 
     jPanel2a = new JPanel(); 
     jPanel2b = createContentPane(); 

     jSplitPane2 = new JSplitPane(JSplitPane.VERTICAL_SPLIT, jPanel2a, 
       jPanel2b); 
     jSplitPane2.setOneTouchExpandable(true); 
     jSplitPane2.setDividerLocation(100); 

     jSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, jPanel1, 
       jSplitPane2); 
     jSplitPane.setOneTouchExpandable(true); 
     jSplitPane.setDividerLocation(150); 

     frame.add(jSplitPane); 
     frame.setJMenuBar(createMenuBar()); 

     // Display the window. 
     frame.setSize(800, 600); 
     frame.setVisible(true); 
    } 

    public JMenuBar createMenuBar() { 
     JMenuBar menuBar; 
     JMenu menu; 

     menuBar = new JMenuBar(); 

     menu = new JMenu("Home"); 
     menu.setMnemonic(KeyEvent.VK_H); 
     menu.getAccessibleContext().setAccessibleDescription("File Menu Items"); 
     menuBar.add(menu); 

     menu = new JMenu("About"); 
     menu.setMnemonic(KeyEvent.VK_A); 
     menu.getAccessibleContext().setAccessibleDescription("Edit Menu Items"); 
     menuBar.add(menu); 

     menu = new JMenu("Contact Us"); 
     menu.setMnemonic(KeyEvent.VK_C); 
     menu.getAccessibleContext().setAccessibleDescription("Edit Menu Items"); 
     menuBar.add(menu); 

     menu = new JMenu("FAQ"); 
     menu.setMnemonic(KeyEvent.VK_F); 
     menu.getAccessibleContext().setAccessibleDescription("Edit Menu Items"); 
     menuBar.add(menu); 

     menu = new JMenu("Log In"); 
     menu.setMnemonic(KeyEvent.VK_L); 
     menu.getAccessibleContext().setAccessibleDescription("Edit Menu Items"); 
     menuBar.add(menu); 

     return menuBar; 
    } 

    public JPanel createContentPane() { 
     // Create the content-pane-to-be. 
     JPanel contentPane = new JPanel(new BorderLayout()); 
     contentPane.setOpaque(true); 

     // Create a scrolled text area. 
     output = new JTextArea(5, 30); 
     output.setEditable(false); 
     scrollPane = new JScrollPane(output); 

     // Add the text area to the content pane. 
     contentPane.add(scrollPane, BorderLayout.CENTER); 

     return contentPane; 
    } 

} 
+0

Огромное спасибо, я буду практиковать, делая мой код более эффективным. –

Смежные вопросы