2013-09-30 9 views
1

, поэтому у меня есть два класса testPanel и testFrame. Все кнопки находятся в классе testPanel. Я хочу добавить ActionListeners в Jbuttons в классе testFrame. Как мне это сделать?Добавьте actionListener в JButton из другого класса

testPanel:

public class testPanel extends JPanel{ 

JLabel codeLbl = new JLabel("Code"); 
JLabel titleLbl = new JLabel("Title"); 
JLabel priceLbl = new JLabel("Price"); 

JTextField codeTxt = new JTextField(20); 
JTextField titleTxt = new JTextField(20); 
JTextField priceTxt = new JTextField(20); 

JButton addBtn = new JButton("Add"); 
JButton updateBtn = new JButton("Update"); 
JButton delBtn = new JButton("Delete"); 
JButton exitBtn = new JButton("Exit"); 
JButton firstBtn = new JButton("First"); 
JButton prevBtn = new JButton("Previous"); 
JButton nextBtn = new JButton("Next"); 
JButton lastBtn = new JButton("Last"); 

JPanel info = new JPanel(); 
JPanel buttons = new JPanel(); 

public testPanel(){ 
    info.setLayout(new GridLayout(3,2)); 

    info.add(codeLbl); 
    info.add(codeTxt); 
    info.add(titleLbl); 
    info.add(titleTxt); 
    info.add(priceLbl); 
    info.add(priceTxt); 

    buttons.setLayout(new GridLayout(2,4)); 

    buttons.add(addBtn); 
    buttons.add(updateBtn); 
    buttons.add(delBtn); 
    buttons.add(exitBtn); 
    buttons.add(firstBtn); 
    buttons.add(prevBtn); 
    buttons.add(nextBtn); 
    buttons.add(lastBtn); 

    JPanel container = new JPanel(); 
    container.setLayout(new BorderLayout()); 

    container.add(BorderLayout.CENTER, info); 
    container.add(BorderLayout.SOUTH, buttons); 

    add(container); 
} 
} 

testFrame:

public class testFrame extends JFrame{ 
JPanel p = new testPanel(); 

public testFrame(){ 
    super("BLAH");   

    this.getContentPane().add(p);setVisible(true); 
    pack(); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 

public static void main(String[] args){ 
    new testFrame(); 
} 

}

+0

Вы хотите попробовать предложения MadProgrammer и/или YAT, или если это не так, покажите свою попытку сделать то, что они предлагают, и проблемы, которые у вас возникают с этой попыткой. –

ответ

1

Прежде всего, я бы вместо простого обеспечения доступа общественности к кнопке на панели, это приводит к слишком много вопросов с управлением и сферой ответственности ... IMHO

Вы, урожденная d некоторая ссылка на testPane, которая затем предоставит функциональность для присоединения ActionListener. Тогда для управления тем, как это делается, нужно до testPane.

0

Вот что вы можете сделать:

1. Сначала создайте класс, который расширяет JPanel

2. В этом классе, определить метод setActionListener так:

public void setButtonsActionListener(ActionListener listener){ 
    // and in here set your buttons action listeners 

    button1.addActionListener(listener); 
    button2.addActionListener(listener); 
    ... 

} 

3, В JFrame класс, вызовите метод setButtonsActionListener на панели с анонимной реализацией интерфейса ActionLister:

thePanel.setButtonsActionListener(new ActionListener(){ 
     @Override 
     void actionPerformed(ActionEvent e){ 
      // here do what you gotta do when the button is clicked 
     } 

    }); 
+0

Я попытался добавить метод в класс testPanel, но NetBeans не смог найти setActionListener(); – kyros

+0

Извините, я сделал ошибку, это addActionListener not setActionListener – Turkish

+0

, и вы должны научиться читать список методов, доступных в типе объекта из javadoc (просто Google JButton javadoc) – Turkish

-1

Ну вы могли бы попробовать это (что потребует от вас есть экземпляр класса testPanel и button1 быть установлены для общественности:

testFrame.button1.setActionListener(new ActionListener(@Override public void actionPerformed(ActionEvent event){}}); 

Или вы могли бы сделать функцию внутри testPanel, который устанавливает слушатель действия ,

+0

Это сломает инкапсуляцию и не рекомендуется. –

+0

Я знаю, что это будет, но я не знал, как они пытались это сделать, поэтому я предложил это, но спасибо за указание моей ошибки –

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