2012-05-02 3 views
1

Я не могу установить новый макет окна. У меня есть меню и подменю. У меня есть прослушиватель действий в моем подменю, который направляет меня в новое окно. Проблема в том, что я не могу установить его в заданный макет. Вот мой код:Настройка макета моего объекта меню

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class Converter extends JFrame 
{ 
    private static final long serialVersionUID = 1L; 
    private MoneyDetails convertMe = new MoneyDetails(); 
    private JLabel tlLabel = new JLabel("  Amount of TL"); 
    private JLabel dollarsLabel = new JLabel("Amount of Dollars"); 
    private JTextField tlField = new JTextField("0.0"); 
    private JTextField dollarsField = new JTextField("0.0"); 
    private JButton tlButton = new JButton("Convert to $"); 
    private JButton dollarsButton = new JButton("<<< Convert to TL"); 
    private JButton setRates = new JButton("Set Rates"); 

    private JMenuBar menuBar = new JMenuBar(); // Window menu bar 
    public Converter(String title) { 
     setTitle(title); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setJMenuBar(menuBar); // Add the menu bar to the window 
     JMenu fileMenu = new JMenu("File"); // Create File menu 
     JMenu elementMenu = new JMenu("Elements"); // Create Elements menu 
     JMenuItem subTest = new JMenuItem("Test"); 

     // Here is the problem 
     subTest.addActionListener(new ActionListener(){  
      public void actionPerformed(ActionEvent actionEvent){ 
       Converter convert = new Converter(); 

       GridLayout expLay = new GridLayout(2,2,12,6); 
       convert.setLayout(expLay); 
       convert.getLayout(); 
       convert.doLayout(); 
       convert.setVisible(true); 
      } 
     }); 

     menuBar.add(fileMenu); // Add the file menu 
     menuBar.add(elementMenu); // Add the element menu 
     fileMenu.add(subTest); 
    } 

    public Converter() 
    { 
     JPanel dataPanel = new JPanel(new GridLayout(2, 2, 12, 6)); 
     dataPanel.add(tlLabel); 

     dataPanel.add(dollarsLabel); 
     dataPanel.add(tlField); 
     dataPanel.add(dollarsField); 
     JPanel buttonPanel = new JPanel(); 
     buttonPanel.add(tlButton); 
     buttonPanel.add(dollarsButton); 
     Container container = this.getContentPane(); 
     container.add(dataPanel, BorderLayout.CENTER); 
     container.add(buttonPanel, BorderLayout.SOUTH); 
     tlButton.addActionListener(new TLConverter()); 
     dollarsButton.addActionListener(new DollarsConverter()); 
     buttonPanel.add(setRates); 
    } 

    private class TLConverter implements ActionListener 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      try 
      { 
       String input = tlField.getText(); 
       double tl = Double.parseDouble(input); 
       convertMe.setTL(tl); 
       double dollars = convertMe.getDollars(); 
       dollarsField.setText(String.format("%.2f", dollars)); 
      } 
      catch(Exception ex) 
      { 
       JOptionPane.showMessageDialog(null, "Please enter the amount that will be converted."); 
      } 
     } 
    } 

    private class DollarsConverter implements ActionListener 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      String input = dollarsField.getText(); 
      double dollars = Double.parseDouble(input); 
      convertMe.setDollars(dollars); 
      double tl = convertMe.getTL(); 
      tlField.setText(String.format("%.2f", tl)); 
     } 
    } 

    public static void main(String [] args) 
    { 
     System.out.println("bbb"); 
     Converter window = new Converter("Para Dönüstürücü"); 
     System.out.println("aaa"); 
     window.setBounds(30, 30, 300, 300); 
     window.setVisible(true); 
    /* Converter theGUI = new Converter(); 
     theGUI.setTitle("TL to $ or $ to TL Converter"); 
     theGUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     theGUI.pack(); 
     theGUI.setVisible(true); */ 
    } 
} 

Проблема заключается в конструктор с аргументом String: subTest.addActionListener(new ActionListener(){...

+0

Пожалуйста, уточните, что _exactly_ не работает. Что вы пытаетесь сделать, что вы ожидаете и что получаете вместо этого? Вы также не должны называть 'doLayout()' напрямую, но пусть Swing сделает это за вас. – Thomas

+0

В чем проблема снова? Кажется, для меня очень много работы (после добавления в поддельный класс «MoneyDetails»). Когда я нажал «Тест», у меня появилось маленькое окно, это малость в вашей проблеме? Попробуйте вызвать 'pack()' в конце конструктора по умолчанию, если так ... –

+0

У меня есть меню и подменю. Когда я нажимаю на свое подменю, у меня есть новое окно. И я хочу установить его GridLayout. Я пробовал много способов, но никто из них не работал. Вот скриншоты, Thats, как это выглядит сейчас: http://desmond.imageshack.us/Himg189/scaled.php?server=189&filename=screenshot20120502at202.png&res=landing, и Thats, как я хочу, чтобы это выглядело как http: // desmond.imageshack.us/Himg703/scaled.php?server=703&filename=screenshot20120502at202.png&res=landing –

ответ

1

Добавьте вызов pack() в конструктор по умолчанию.

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