[ vatri @ 07.08.2013. 17:52 ] @
Pozdrav ljudi. Ispod sam postavio kod koji bi trebao nakon klika na dugme "User list" prikazati jednu tabelu. Imam public funkciju showUserList() koja generise JPanel sa elementima i doda u glavni JPanel main_panel... Ako tu funkciju pozovem iz konstruktora, odradice posao. Medjutim, kada ju pozovem unutar klase Evt(public class Evt implements ActionListener) nakon klika - ne radi. Ona se u stvari pozove (ispise mi u konzolu liniju 60 kao i liniju 84) ali ne doda taj pomocni u glavni JPanel. Pretpostavljam da je problem sa "scope", ali ne kontam zasto kad sam taj glavni panel definisao kao parametar glavne klase a ActionListener je takodje unutar te glavne klase? Ovo sam rjesio na drugaciji nacin ali me zanima u cemu je ovde problem ? (Rjesio sam tako da dodam u konstruktoru pomocni na glavni panel s tim da je po defaultu pomocni panel setVisible(false) a nakon klika se pozove setVisible(true) ) Pocetnik sam u Javi tako da se izvinjavam na mozda glupom pitanju :) Hvala unaprijed! Code: import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Event; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JLabel; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTable; import static java.lang.System.out; public class FitnessManager extends JFrame { private static final long serialVersionUID = -1637092118047436365L; JPanel panel_main = new JPanel(new GridBagLayout()); JPanel panel_user_list = new JPanel(new GridBagLayout()); GridBagConstraints c = new GridBagConstraints(); public FitnessManager() { getContentPane().add(panel_main,BorderLayout.NORTH); Evt e = new Evt(); panel_main.setLayout(new GridBagLayout()); JButton btn_reports = new JButton("Reports"); c.insets = new Insets(20, 20, 20, 20); c.gridx = 0; c.gridy = 1; panel_main.add(btn_reports,c); JButton btn_user_list = new JButton("User list"); c.gridx = 1; c.gridy = 1; panel_main.add(btn_user_list,c); btn_user_list.addActionListener(e); JButton btn_user_add = new JButton("Add user"); c.gridx = 2; c.gridy = 1; panel_main.add(btn_user_add,c); //this works: //showUserList(); } public void showUserList() { out.println("showUserList() called..."); JLabel table_title = new JLabel("List of users"); c.gridy = 2; c.gridx = 0; c.gridwidth = 5; c.anchor = GridBagConstraints.LINE_START; c.insets = new Insets(5, 5, 5, 5); panel_user_list.add(table_title,c); String[] columns = {"Name and surname", "Last payment"}; Object[][] data = { {"John Suton", "19.07.2013."} ,{"Mark Bergen", "20.07.2013."} ,{"Djordje Djuric", "02.07.2013."} }; JTable tbl_list = new JTable(data,columns); tbl_list.setPreferredScrollableViewportSize(new Dimension(200, 50)); tbl_list.setFillsViewportHeight(true); c.gridy = 3; c.gridx = 0; c.gridwidth = 3; panel_user_list.add(tbl_list,c); out.println( panel_user_list); panel_main.add(panel_user_list,c); } public class Evt implements ActionListener { public void actionPerformed(ActionEvent a) { String act = a.getActionCommand(); if( act.equals("User list")){ out.println("Event listener called"); showUserList(); } } } public static void main(String[] args) { FitnessManager gui = new FitnessManager(); gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); gui.setVisible(true); gui.setSize(450, 450); gui.setTitle("BT Fitness Manager"); } }//class |