2016-07-02 84 views
0

好吧,我正在做一個遊戲,現在我有一個圖像,並試圖將按鈕放在圖像下的特定位置,所以當用戶點擊屏幕上的圖像部分時,圖像會改變。我在試圖弄清楚如何爲動作監聽器格式化我的程序時遇到了困難。Action listener java problems

public class TestJFrame{ 
    private static JFrame frame = new JFrame(); 
    private static JLabel label = new JLabel(); 
    private static JButton buttons[] = new JButton[4]; 

    private static int[][] location = new int[3][4]; 


    public static void main(String args[]){ 
     frame.getInsets().set(20, 5, 5, 5); 

     frame.setLayout(null); 
     frame.setPreferredSize(new Dimension(507, 528)); 
     frame.pack(); 
     frame.setResizable(false); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setTitle("Test"); 

     buttons[0] = new JButton("jbZero"); 
     buttons[1] = new JButton("jbOne"); 
     buttons[2] = new JButton("jbTwo"); 
     buttons[3] = new JButton("jbThree"); 

     frame.add(buttons[0]); 
     frame.add(buttons[1]); 
     frame.add(buttons[2]); 
     frame.add(buttons[3]); 

     setButtons(); 
     frame.setVisible(true); 

     buttons[0].setLocation(100, 100); 
    } 


    private static void setButtons(){ 
     for (int i=0;i<=3;i++){ 
      buttons[i].setSize(10, 10); 
      buttons[i].setLocation(0, 0); 
      buttons[i].setVisible(true); 
     } 
    } 

    public void intializeListener(){ 
     buttons[0].addActionListener((ActionListener) this);   
    } 

    public void buttonsZeroActionPreformed(java.awt.event.ActionEvent e){ 
     System.out.println("button zero works"); 
    } 
} 

所以任何幫助將不勝感激。

+0

Java的圖形用戶界面有不同的OS」,屏幕尺寸工作,屏幕分辨率等使用不同的地區不同的PLAFs。因此,它們不利於像素的完美佈局。請使用佈局管理器或[它們的組合](http://stackoverflow.com/a/5630271/418556)以及[white space]的佈局填充和邊框(http://stackoverflow.com/a/17874718/ 418556)。 –

回答

1

取決於你想在聽者實現的東西:

  1. 如果他們做同樣的動作,你實現內部setButtons功能監聽器:

    private static void setButtons(){ 
        for (int i=0;i<=3;i++){ 
         buttons[i].setSize(10, 10); 
         buttons[i].setLocation(0, 0); 
         buttons[i].setVisible(true); 
    
         buttons[i].addActionListener(new ActionListener() { 
          @Override 
          public void actionPerformed(ActionEvent e) { 
           // listener implement btn 0 
          } 
         }); 
        } 
    } 
    
  2. 如果每個按鈕需要唯一實現我認爲更好的實施將在一個新的功能setBtnListeners和調用它從你的主後使用setButtons();

    private static void setBtnListeners() { 
        buttons[0].addActionListener(new ActionListener() { 
         @Override 
         public void actionPerformed(ActionEvent e) { 
           // listener implement btn 0 
         } 
        }); 
    } 
    

更新:對不起我只是注意到你有四個按鈕......你可以再補充一個又一個:)