2013-11-29 5 views
1

Главного класс:Где я могу поставить это утверждение setJMenuBar (menuBar); '?

import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 
import javax.swing.JFrame; 
import javax.swing.JOptionPane; 


public class Main extends JFrame { 

public static void main(String[] args) { 
    JFrame frame = new JFrame("Checking Account Actions"); 
    frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 

    CheckingAccountActions panel = new CheckingAccountActions(); 

    MyWindowAdapter winAdapter = new MyWindowAdapter(panel); 
    frame.addWindowListener(winAdapter); 

    frame.getContentPane().add(panel); 
    frame.pack(); 

    frame.setVisible(true); 
} 

} // Main() 

class MyWindowAdapter extends WindowAdapter { 
private CheckingAccountActions saved; 

public MyWindowAdapter(CheckingAccountActions saved) { 
    this.saved = saved; 
} 

// in your window closing method 
// check the state of checkActions first before doing anything 
public void windowClosing(WindowEvent e) { 
    // note -- don't check for saved in a static way 
    // use a method on the instance. 
    if(!saved.saved) { 
     String message = "The data in the application is not saved.\n" 
         + "Would you like to save it before exiting the 
              + application?"; 
     int confirm = JOptionPane.showConfirmDialog (null, message); 

     if (confirm == JOptionPane.YES_OPTION) 
      CheckingAccountActions.chooseFile(2); 
    } 

    JFrame frame = (JFrame)e.getSource(); 
    frame.setVisible(false); 

    // Main.frame.setVisible(false); 
    System.exit(0); 
} 

} // MyWindowAdapter() 

Этот класс, как вы видите, расширяет JPanel и это, где мои пункты меню инициализируется, но я могу использовать Основной класс для этого оператора «setJMenuBar (Menubar);», так как оно выдает ошибку в CheckingAccountActions, потому что JFrame находится в MAIN.

CheckingAccountActions класс:

public class CheckingAccountActions extends JPanel { 
// Panel 
private JLabel   message; 

// Menu 
private JMenuBar   menuBar; 

private JMenu   File; 
private JMenuItem  Read, Write; 

private JMenu   Account; 
private JMenuItem  NewAccount, ListAccounts, ListChecks, ListDeposits, FindAccount; 

private JMenu   Transactions; 
private JMenuItem  AddTransactions; 

// code... 
// 
// 
// code... 

public CheckingAccountActions() { 


//************************** PANEL ***************************************** 
// JLabel 
    message = new JLabel("Please choose one of the items: "); 
    message.setFont(new Font("Helvetica", Font.BOLD, 15)); 

    CheckingAccountActionsListener listener = new CheckingAccountActionsListener(); 

//************************** MENU ****************************************** 
// Menu 
    File = new JMenu("File"); 
// MenuItem 
    Read = new JMenuItem("Read from file"); 
    Write = new JMenuItem("Write to file"); 
// ActionListener 
    Read.addActionListener(listener); 
    Write.addActionListener(listener); 
// Add Buttons to Menu 
    File.add(Read); 
    File.add(Write); 

// Menu 
    Account = new JMenu("Account"); 
// MenuItem 
    NewAccount = new JMenuItem("Add new account"); 
    ListAccounts = new JMenuItem("List accounts transaction"); 
    ListChecks = new JMenuItem("List all checks"); 
    ListDeposits = new JMenuItem("List all deposits"); 
    FindAccount = new JMenuItem("Find an account"); 
// ActionListener 
    NewAccount.addActionListener(listener); 
    ListAccounts.addActionListener(listener); 
    ListChecks.addActionListener(listener); 
    ListDeposits.addActionListener(listener); 
    FindAccount.addActionListener(listener); 
// Add Buttons to Menu 
    Account.add(NewAccount); 
    Account.add(ListAccounts); 
    Account.add(ListChecks); 
    Account.add(ListDeposits); 
    Account.add(FindAccount); 


// Menu 
    Transactions = new JMenu("Transactions"); 
// MenuItem 
    AddTransactions = new JMenuItem("Add Transactions"); 
// ActionListener 
    AddTransactions.addActionListener(listener); 
// Add Buttons to Menu 
    Transactions.add(AddTransactions); 

// MenuBar 
    menuBar = new JMenuBar(); 
    menuBar.add(File); 
    menuBar.add(Account); 
    menuBar.add(Transactions); 

    setBackground(Color.white); 
    setPreferredSize(new Dimension(240, 250)); 
    setJMenuBar(menuBar); 
} 

private class CheckingAccountActionsListener implements ActionListener { 

// code... 

} 

Edit: то, что я запутался о том, как добавить мой MenuBar к раме, а рама находится в другом классе?

ОКОНЧАТЕЛЬНЫЙ РЕДАКТОР: Я получил его работу. Я просто переместил все мои компоненты JFrame в класс CheckingAccountActions.

ответ

3

Взгляните на раздел из учебника Swing по телефону How to Use Menus. Пример MenuDemo покажет вам один способ структурирования вашей программы.

Он также показывает вам правильный способ создания графического интерфейса пользователя в разделе «Диспетчер событий».

+0

Эй, в приведенной ссылке, она показывает мне эту строку в конце 'frame.setJMenuBar (theJMenuBar);'. Поскольку мой основной класс расширяет JFrame, все, что мне нужно, это «setJMenuBar», но в ссылке структура программы не такая же, как у меня, ее 1 целая программа с частью JFrame. Моя отдельно, так как я могу заставить Main класс принять мой menuBar? Как передать его в Main? – codefl0w

+1

Вот в чем смысл учебника. Он показывает вам, как лучше структурировать вашу программу. Следуйте примеру учебника, и у вас не будет проблем. У вас не должно быть логики приложения в вашем основном методе, кроме создания отображения кадра. – camickr

1

setJMenuBar(menubar) не то, что вы на самом деле ищете. Если вы хотите установить строку меню в свой фрейм, просто добавьте строку меню в рамку с помощью метода add(menuBar).

+0

Это то, что я искал! Итак, что мне интересно, я просто добавляю (menuBar) в главную программу? Это также дает мне ошибку, о чем я смущен, о том, как добавить мой MenuBar в рамку, в то время как Frame находится в другом классе? – codefl0w

+0

Вы должны добавить menuBar только в кадре. а не в 'JPanel' – Prasad

+2

-1, кадр имеет специальное расположение для строки меню, и вы должны использовать метод' setJMenuBar (...) '. @EdoIsa, прочитайте учебник. Я дал вам ссылку! – camickr

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