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
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