2016-03-19 14 views
1

私はcomboBoxを作成したプログラムを作成していましたが、それをクリックするとフレームが表示されるようにactionlistenerを追加しています。このコードを簡単に書く方法はありますか?

コード:

String menulist [] = {"", "Array", "BubbleSort" ," - Selection Sort"," - Insertion Sort"," - Merge Sort","Recursion"," - Factorial"," - Anagramming"," - Towers of Hanoi","Stacks","Trees"," - Types of Trees","Binary Tree","Shell Sort","Quick Sort","Hash Table","Graphs"}; 
    final JComboBox SelectMenu = new JComboBox(menulist); 
    SelectMenu.setFont(new Font("Tahoma", Font.PLAIN, 17)); 

    SelectMenu.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      int list = SelectMenu.getSelectedIndex(); 



      if(list == 1){ 

       //Array 
       JFrame frameArray = new JFrame(); 
       frameArray.setBounds(100, 100, 830, 601); 
       frameArray.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
       frameArray.getContentPane().setLayout(null); 
       frameArray.setVisible(true); 

       JLabel lblArray = new JLabel("Array"); 
       lblArray.setFont(new Font("Lucida Bright", Font.BOLD | Font.ITALIC, 25)); 
       lblArray.setBounds(368, 63, 122, 41); 
       frameArray.getContentPane().add(lblArray); 

       JLabel AnArrayIs = new JLabel(); 
       AnArrayIs.setBackground(Color.WHITE); 
       AnArrayIs.setText("An array is a systematic arrangement of similar objects, usually in rows and columns."); 
       AnArrayIs.setBounds(46, 103, 357, 432); 
       frameArray.getContentPane().add(AnArrayIs); 

その場合には、私があれば、ほぼ16例の多くのを使用しているならば、他の私が使用してしまいます。フレームのコードを短く書く方法はありますか?だから私はちょうど16のインデックスまで、if - elseを続けていますか?

ありがとうございます! (:

+2

[CardLayoutを使用する方法](http://docs.oracle.com/javase/tutorial/uiswing/layout/card.html) – MadProgrammer

答えて

1

あなたが変更している唯一のものはラベルで、テキストはそのようにのようにメソッドを作る場合:

 public Jframe getJframe(String label, String text){  
      JFrame frameArray = new JFrame(); 
      frameArray.setBounds(100, 100, 830, 601); 
      frameArray.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
      frameArray.getContentPane().setLayout(null); 
      frameArray.setVisible(true); 

      JLabel lblArray = new JLabel(label); 
      lblArray.setFont(new Font("Lucida Bright", Font.BOLD | Font.ITALIC, 25)); 
      lblArray.setBounds(368, 63, 122, 41); 
      frameArray.getContentPane().add(lblArray); 

      JLabel AnArrayIs = new JLabel(); 
      AnArrayIs.setBackground(Color.WHITE); 
      AnArrayIs.setText(text); 
      AnArrayIs.setBounds(46, 103, 357, 432); 
      frameArray.getContentPane().add(AnArrayIs); 
      return frameArray; 
      } 

は、あなたの文またはswitch文は、のみ見えるようにしている場合

Jframe myJframe = null; 
if(list==1){ 
    myJframe = getJframe(menuList[1],"An array is.....") 
} else if(list ==2){ 
    myJframe = getJframe(menuList[2],"BubbleSort is ...") 
}.... 
あなたが簡単にそれらを変更することができますので、私はおそらくのように、定義の定数を作成したい

public static final String ARRAY_DEFINITION = "An array is a ...."; 
1

コードを複雑にする方法の1つは、各インデックスを処理するために異なるJFrameサブクラスを作成することです。フレーム、あなたのif文で

public class ArrayFrame extends JFrame { 
    public ArrayFrame() { 
     setBounds(100, 100, 830, 601); 
     setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     getContentPane().setLayout(null); 

     JLabel lbl = new JLabel("Array"); 
     lbl.setFont(new Font("Lucida Bright", Font.BOLD | Font.ITALIC, 25)); 
     lbl.setBounds(368, 63, 122, 41); 
     getContentPane().add(lbl); 

     JLabel detailLbl = new JLabel(); 
     detailLbl.setBackground(Color.WHITE); 
     detailLbl.setText("An array is..."); 
     detailLbl.setBounds(46, 103, 357, 432); 
     getContentPane().add(detailLbl); 
    } 
} 

ArrayFrameのインスタンスを作成して開きます:

if (list == 1) { 
    ArrayFrame frame = new ArrayFrame(); 
    frame.setVisible(true); 
} 

より保守だ

は、最初のインデックスは、「アレイ」ので、新しいJFrameサブクラスを作成することですそれはより抽象的であることを意味する多くの細部を隠す。誰もがOOPで抽象を愛しています!

「まあ、まだ16のクラスを作成する必要があります。あなたは実際には1つのクラスを作成することができます!

public class MyFrame extends JFrame { 
    public MyFrame (String title, String details) { 
     setBounds(100, 100, 830, 601); 
     setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     getContentPane().setLayout(null); 

     JLabel lbl = new JLabel(title); 
     lbl.setFont(new Font("Lucida Bright", Font.BOLD | Font.ITALIC, 25)); 
     lbl.setBounds(368, 63, 122, 41); 
     getContentPane().add(lbl); 

     JLabel detailLbl = new JLabel(); 
     detailLbl.setBackground(Color.WHITE); 
     detailLbl.setText(details); 
     detailLbl.setBounds(46, 103, 357, 432); 
     getContentPane().add(detailLbl); 
    } 
} 

そして、あなたはちょうどこのようなコンストラクタを呼び出すことで、このフレームを作成することができます。

if (list == 1) { 
    MyFrame frame = new MyFrame ("Array", "An array is..."); 
    frame.setVisible(true); 
} 

また、if文スイッチを使用しての代わりに検討してください。

0

私はこの場合、if-elseを使用していますが、この例ではほとんど16個の例を使用しています。フレームのコードを短く書く方法はありますか?だから私はちょうど16のインデックスまで、if - elseを続けていますか?

あなたの最善の選択肢は、if/elseステートメントの代わりにswitchステートメントを使用することです。はるかに簡単です。

でこの例を参照してくださいOracle Documentation

public class SwitchDemo { 
    public static void main(String[] args) { 

     int month = 8; 
     String monthString; 
     switch (month) { 
      case 1: monthString = "January"; 
        break; 
      case 2: monthString = "February"; 
        break; 
      case 3: monthString = "March"; 
        break; 
      case 4: monthString = "April"; 
        break; 
      case 5: monthString = "May"; 
        break; 
      case 6: monthString = "June"; 
        break; 
      case 7: monthString = "July"; 
        break; 
      case 8: monthString = "August"; 
        break; 
      case 9: monthString = "September"; 
        break; 
      case 10: monthString = "October"; 
        break; 
      case 11: monthString = "November"; 
        break; 
      case 12: monthString = "December"; 
        break; 
      default: monthString = "Invalid month"; 
        break; 
     } 
     System.out.println(monthString); 
    } 
} 
関連する問題