2016-08-13 47 views
0

我嘗試測試是否可以更改組合框選定的索引時,我按下按鈕,但它不適用於我什麼我試試如果我的組合框被添加到我的框架從另一個班級,請問我想念什麼?如何將選定的索引設置爲0從另一個類的組合框

,我創建的組合框我的班級:

package MyPackage; 

import javax.swing.DefaultComboBoxModel; 
import javax.swing.JComboBox; 

public class AddMyBox { 

    private JComboBox combobox; 
    String[] array = {"Select", "1", "2", "3"}; 

    public JComboBox theBox() { 
     combobox = new JComboBox(); 
     combobox.setModel(new DefaultComboBoxModel(array)); 
     combobox.setBounds(10, 11, 414, 20); 
     return combobox; 
    } 

} 

,並在那裏創建了我的軀體,並在那裏我添加成分是類:

package MyPackage; 

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

public class MyFrame extends JFrame { 

    public MyFrame() { 
     getContentPane().setLayout(null); 
     setVisible(true); 

     // adding the comboBox from class AddMyBox 
     AddMyBox getBox = new AddMyBox(); 
     getContentPane().add(getBox.theBox()); 

     JButton btnNewButton = new JButton("New button"); 
     btnNewButton.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 
       try { 
        // if selected index is 1 make it 0 when the button is pressed 
        if(getBox.theBox().getSelectedIndex() != 0) { 
         getBox.theBox().setSelectedIndex(0); 
        } 
       } catch (Exception e) { 
        // TODO: handle exception 
       } 
      } 
     }); 
     btnNewButton.setBounds(10, 63, 414, 23); 
     getContentPane().add(btnNewButton); 

     setSize(500,400); 
     setLocationRelativeTo(null); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } 

    public void MyFrame1() { 
     // TODO Auto-generated method stub 
    } 

} 

我的主類是: 包MyPackage;

public class MyMain { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     MyFrame getFrame = new MyFrame(); 
     getFrame.MyFrame1(); 
    } 

} 
+0

*「你可以告訴我我錯過了什麼嗎?」*基本的面向對象,應該在兩個類中計算出來,這兩個類意味着從命令行運行。 GUI是一個高級主題,您應該已經瞭解對象引用和通過方法訪問來封裝屬性。 –

回答

5
public JComboBox theBox() { 
    combobox = new JComboBox(); 
    combobox.setModel(new DefaultComboBoxModel(array)); 
    combobox.setBounds(10, 11, 414, 20); 
    return combobox; 
} 

每次調用theBox()方法創建一個新的組合框,讓你的ActionListener邏輯被引用的組合框不可見在框架上,所以你看到的組合框將永遠更改。

你班的結構是錯誤的。您需要:

  1. 爲類創建一個構造函數,該類只創建組合框。基本上你需要將前3個語句移到構造函數中。
  2. 更改theBox()方法以簡單地返回comboBox變量。 (這是後你唯一剩下的聲明中刪除前3所陳述

編輯:

我複製從氣墊船回答其他問題,因爲OP將無法引用它們:

其他問題:

  • combobox.setBounds(10, 11, 414, 20);是不是你想做的事 - 包括使用幻數,使得這種方法非常不靈活,並建議您使用的是null佈局,你真的想避免的東西。
  • getContentPane().setLayout(null);是的。不要這樣做。雖然Swing的新手可能看起來像是創建複雜GUI的最簡單也是最好的方式,但更多Swing GUI的創建使用它們時會遇到更嚴重的困難。它們不會在GUI大小調整時調整組件的大小,它們是增強或維護的皇室女巫,當它們放在滾動窗格中時它們會完全失敗,在所有平臺或屏幕分辨率與原始視圖不同時,它們看起來會非常糟糕。
  • catch (Exception e) { // TODO: handle exception } - 做評論建議 - 處理你的例外,永遠不會忽視它們。否則,你會在閉上眼睛的情況下進行相當於駕駛汽車的編程。
+0

不,你說得對。這是我的大腦尚未發揮作用 - 需要更多的咖啡!1+ –

+0

@camickr Wooooow,它似乎是如此複雜的話題,實際上是什麼氣墊船充分鰻魚建議幫助我,使它的工作。 我會盡力一次又一次地閱讀你的評論,真正理解它,非常感謝你 –

+0

@AboelmagdSaad,它不那麼複雜。它是任何類的基本設計構造函數應該用來創建類的對象。 「getter」方法應該只返回對象的引用,而不是創建一個新的引用。所以你的'theBox()'方法應該被稱爲'getBox()'。查看JDK中任何類的API,您將看到該類的「getter」和「setter」方法。 – camickr

相關問題