2016-05-24 13 views
1

こんにちは、私は2つの配列を使用して、JMenuとJMenuItemsでJMenuBarを作成しようとしています。私はかなりGUIを使用して新しく、私はこれを達成するためのクラスを作ったが、それは動作していません。ループと文字列の配列を持つJMenuBarの作成エラー

import java.util.*; 
import javax.swing.*; 

public class MenuBar { 

    String[] titulos = {"Raices","Sistemas","Interpolacion","Dif. e Int.","Ecuaciones"}; 
    String[][] subTitulos = {{"Biseccion","Falsa Posicion","Secante","Newton-Rhapson","Aprox. Sucesivas","Newton 2ndo. Orden"}, 
      {"Gauss","Gauss-Jordan","Montante","Cramer","Jacobi","Gauss-Seidel"}, 
      {"Diferencias Finitas","Newton","LaGrange","Min. Cuadrados"}, 
      {"Por Limites","Diferencias Finitas","Trapecio","Trapecio","Simpson","Simpson"}, 
      {"Euler","Euler-Gauss"}}; 

    public JMenuBar menuBar = new JMenuBar(); 
    public JMenu[] menus; 
    public List<List<JMenuItem>> menuItems; 

    public MenuBar(){ 
     menus = new JMenu[titulos.length]; 
     menuItems = new ArrayList<List<JMenuItem>>(); 

     for (int i=0;i<titulos.length;i++){ 
      menus[i]= new JMenu(titulos[i]); 
      menuItems.add(new ArrayList<JMenuItem>()); 


      for(int j=0;j<subTitulos[i].length;j++){ 
       menuItems.get(i).add(new JMenuItem(subTitulos[i][j])); 
       menus[i].add(menuItems.get(i).get(j)); 
      } 

      menuBar.add(menus[i]); 

     } 

    } 

} 

コードは、私がJMenuを作成するポイントまで機能します。これは完璧に機能します。しかし、2番目のループの中にJMenuItemを作成するとすぐに、たとえそれを格納したり貼り付けたりしなくても、ブレークして、フレーム内にmenuBarを表示しません。

実際にはうまく動作しないため、非常に奇妙ですが、まれにはさらに混乱します。

これは私のメインクラスです:

public class Main { 

    public static void main(String[] args) { 
     JFrame frame = new JFrame("Menu"); 
     frame.setVisible(true); 
     frame.setSize(900, 800); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     MenuBar menuBar = new MenuBar(); 

     frame.setJMenuBar(menuBar.menuBar); 


    } 

} 

答えて

1

GUI関連のコードは、GUIのイベントスレッドで実行する必要があります。あなたはおそらくこれをしたい:

SwingUtilities.invokeLater(() -> { 
    JFrame frame = new JFrame("Menu"); 
    frame.setVisible(true); 
    frame.setSize(900, 800); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    MenuBar menuBar = new MenuBar(); 
    frame.setJMenuBar(menuBar.menuBar); 
}); 

また、最後setVisibleを行うことをお勧めします。

SwingUtilities.invokeLater(() -> { 
    MenuBar menuBar = new MenuBar(); 

    JFrame frame = new JFrame("Menu");  
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    frame.setJMenuBar(menuBar.menuBar); 
    frame.setSize(900, 800); 
    frame.setVisible(true); 
}); 
+0

ありがとうございました。私はGUIに慣れていないので気づいていませんでした。 – user2620232

関連する問題