# فناوری جاوا > برنامه‌نویسی جاوا > Java SE : نگارش استاندارد جاوا >  رویداد click روی jtable

## fbcomputer

سلام دوستان 
من یه table ایجاد کردم که اطلاعتشو از دیتابیس میگیره و نمایش میده، از table model هم استفاده کردم اما اصلا رویداد click اجرا نمیشه
table روی یه panel قرار داره، کد مربوط به table , panel اینطوریه:        jPanel1.setBounds(new Rectangle(30, 30, 200, 95));
        jPanel1.setFont(new Font("B Homa", 0, 13));
        jTable1.setColumnModel(new DefaultTableColumnModel());
        jTable1.setTableHeader(new JTableHeader());
        jTable1.setEnabled(false);
        jTable1.addMouseListener(new MouseAdapter() {
                public void mouseClicked(MouseEvent e) {
                    jTable1_mouseClicked(e);
                }
            });
        jPanel1.add(jTable1, BorderLayout.CENTER);
        jPanel1.setLayout(borderLayout1);

احساس میکنم مشکل از borderLayout یا panel باشه چون وقتی یه table خالی ایجاد میکنم رویداد کلیک اجرا میشه
دوستان میشه راهنمایی کنید، ممنون

----------


## fbcomputer

دوستان کسی قرار نیس جواب بده؟؟؟
خب اگه مشکلی نداره حداقل بگید کدش مشکلی نداره.... :ناراحت:

----------


## Ehsan rashydy

اگه میشه کداتونو کامل بزارید!

----------


## fbcomputer

خیلی خیلی ممنون، اینم کد:

 public class Frame_sahm extends JFrame {
    private JButton jbttn_cancel = new JButton();
    private JButton jbttn_insert = new JButton();
    private JTextField jtxt_name = new JTextField();
    private JTextField jtxt_id = new JTextField();
    private JLabel jLabel2 = new JLabel();
    private JLabel jLabel1 = new JLabel();
    private JPanel jPanel1 = new JPanel();
    private BorderLayout borderLayout1 = new BorderLayout();
    private JTable jTable1 = new JTable();
    private JTextField jtxt_takhfif = new JTextField();
    private JLabel jLabel3 = new JLabel();
    private JButton jbtn_update = new JButton();
    private JButton jbtn_delet = new JButton();
    private TableModel tablemodel=new TableModel();

    public Frame_sahm() {
        try {
            jbInit();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void jbInit() throws Exception {
        this.getContentPane().setLayout( null );
        this.getContentPane().setBackground(new Color(181, 231, 255));
        this.setSize(new Dimension(483, 250));
        this.addWindowListener(new WindowAdapter() {
                public void windowActivated(WindowEvent e) {
                    this_windowActivated(e);
                }
            });
        jbttn_cancel.setText("انصراف");
        jbttn_cancel.setBounds(new Rectangle(45, 150, 95, 35));
        jbttn_cancel.setFont(new Font("B Homa", 0, 13));
        jbttn_cancel.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    jbttn_cancel_actionPerformed(e);
                }
            });
        jbttn_insert.setText("افزودن");
        jbttn_insert.setBounds(new Rectangle(360, 150, 95, 35));
        jbttn_insert.setFont(new Font("B Homa", 0, 13));
        jbttn_insert.setNextFocusableComponent(jbttn_cance  l);
        jbttn_insert.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    jbttn_insert_actionPerformed(e);
                }
            });
        jtxt_name.setBounds(new Rectangle(265, 60, 105, 25));
        jtxt_name.setFont(new Font("B Homa", 0, 13));
        jtxt_name.setNextFocusableComponent(jbttn_insert);
        jtxt_name.setHorizontalAlignment(JTextField.RIGHT)  ;
        jtxt_id.setBounds(new Rectangle(265, 20, 105, 25));
        jtxt_id.setFont(new Font("B Homa", 0, 13));
        jtxt_id.setNextFocusableComponent(jtxt_name);
        jtxt_id.setHorizontalAlignment(JTextField.RIGHT);
        jLabel2.setText("نوع سهمیه:");
        jLabel2.setBounds(new Rectangle(400, 55, 70, 35));
        jLabel2.setFont(new Font("B Homa", 0, 13));
        jLabel1.setText("کد سهمیه:");
        jLabel1.setBounds(new Rectangle(395, 10, 80, 35));
        jLabel1.setFont(new Font("B Homa", 0, 13));
        jPanel1.setBounds(new Rectangle(30, 30, 200, 95));
        jPanel1.setFont(new Font("B Homa", 0, 13));
        jPanel1.setVisible(false);
        jTable1.setColumnModel(new DefaultTableColumnModel());
        jTable1.setTableHeader(new JTableHeader());
        jTable1.setEnabled(false);
        jTable1.addMouseListener(new MouseAdapter() {
                public void mouseClicked(MouseEvent e) {
                    jTable1_mouseClicked(e);
                }
            });
        jPanel1.add(jTable1, BorderLayout.CENTER);
        jPanel1.setLayout(borderLayout1);
      
        jtxt_takhfif.setBounds(new Rectangle(265, 100, 105, 25));
        jLabel3.setText("تخفیف:");
        jLabel3.setBounds(new Rectangle(400, 100, 60, 20));
        jLabel3.setFont(new Font("B Homa", 0, 13));
        jbtn_update.setText("ویرایش");
        jbtn_update.setBounds(new Rectangle(255, 150, 95, 35));
        jbtn_update.setFont(new Font("B Homa", 0, 13));
        jbtn_update.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    jbtn_update_actionPerformed(e);
                }
            });
        jbtn_delet.setText("حذف");
        jbtn_delet.setBounds(new Rectangle(150, 150, 95, 35));
        jbtn_delet.setFont(new Font("B Homa", 0, 13));
        jbtn_delet.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    jbtn_delet_actionPerformed(e);
                }
            });


        this.getContentPane().add(jbtn_delet, null);
        this.getContentPane().add(jbtn_update, null);
        this.getContentPane().add(jLabel3, null);
        this.getContentPane().add(jtxt_takhfif, null);


        this.getContentPane().add(jPanel1, null);
        this.getContentPane().add(jLabel1, null);
        this.getContentPane().add(jLabel2, null);
        this.getContentPane().add(jtxt_id, null);
        this.getContentPane().add(jtxt_name, null);
        this.getContentPane().add(jbttn_insert, null);
        this.getContentPane().add(jbttn_cancel, null);
        jbtn_update.setEnabled(false);
        jbtn_delet.setEnabled(false);
    }

    private void jbttn_insert_actionPerformed(ActionEvent e) {
        
        if (jtxt_id.getText().isEmpty())
            JOptionPane.showMessageDialog(null, "لطفا تمام فیلدها را تکمیل کنید","اخطار",JOptionPane.WARNING_MESSAGE  );
        else{
        sahmie sahm=new sahmie();
        sahm.setId_sahm(Integer.parseInt(jtxt_id.getText()  ));
        sahm.setName_sahm(jtxt_name.getText());
        sahm.setTakhfif(jtxt_takhfif.getText());
        sahm.Add_sahmie();
        jtxt_id.setText("");
        jtxt_name.setText("");
        jtxt_takhfif.setText("");
        
        }
    }

    private void jbttn_cancel_actionPerformed(ActionEvent e) {
        this.dispose();
    }
    public void ChangeName(JTable table, int col_index, String col_name){
      table.getColumnModel().getColumn(col_index).setHea  derValue(col_name);
      }
    private void this_windowActivated(WindowEvent e) {
        jTable1=new JTable(tablemodel.data,tablemodel.columnNames);
        jTable1 .setFont(new Font("B Homa", 0, 13));
        
        TableColumn column;
        for (int i = 0; i < jTable1.getColumnCount(); i++) {
           column = jTable1.getColumnModel().getColumn(i);
           column.setMaxWidth(200);
        }
        ChangeName(jTable1, 0, "کد");
        ChangeName(jTable1,1, "نام");
        ChangeName(jTable1, 2, "تخفیف");
        JScrollPane scrollPane = new JScrollPane(jTable1);
        jPanel1.setVisible(true);
        jPanel1.add(scrollPane);
        jPanel1.repaint();
        jPanel1.revalidate();
        
        
        
        
    }
    private void jTable1_mouseClicked(MouseEvent e) {
        JOptionPane.showMessageDialog(null, "hello...............");}

----------


## fbcomputer

دوستان کد مشکلی نداره؟؟
حالا یه سوال دیگه هم دارم، میخوام دوتا radiobutton روی فرم داشته باشم به اسم دختر و پسر، وقتی دختر رو انتخاب میکنم لیست دانش آموزان دختر رو نشون بده و وقتی پسر رو انتخاب میکنم پسرا رو نشون بده،
چطور اینکارو بکنم، یعنی باید تو رویداد کلیک هر دوتا radiobutton کد مربوط به نمایش جدولو بذارم؟؟

----------


## fbcomputer

وقتی جای این دوخط رو با هم عوض میکنم جدول نمایش داده نمیشه ولی رویداد کلیک اجرا میشه، کسی نمیدونه علتشو؟؟
jPanel1.add(jTable1, BorderLayout.CENTER);       jPanel1.setLayout(borderLayout1);

----------


## fbcomputer

آخه چرا هیچکس جواب نمیده؟؟؟؟؟؟؟؟ :گریه:   :گریه: بخدا گیر کردم........................گیج شدم اصلا نمیتونم متوجه بشم علتشو.................  :گیج:

----------


## spiderman200700

شاید بهتر باشه کدهایی که داخل متد this_windowActivated نوشتید رو داخل کانسترکتور بنویسید. قبل از تعریف رویداد Mouse .

----------


## fbcomputer

ممنون که جواب دادین ولی بازم درست نشد، نهایتا یه button گذاشتم براش، جالب نیس ولی .....
یه سوال دیگه هم دارم در مورد جدولها، چطور میتونم با زدن یه button، یه کلیک رو جدول یا .... یه رویدادی ، اطلاعات جدولمو تغییر بدم، درواقع من میخوام یه جدول داشته باشم که اطلاعات افرادم رو نشون بده بعد با کلیک روی این جدول و دریافت id اون شخص روی یه جدول دیگه اطلاعات چک هایی که اون طرف صادر کرده رو نشون بده، برای نفر اول اینکارو انجام میدم اما وقتی میخوام چکهای نفر دوم رو نشون بده جدول تغیر نمیکنه، میشه در این مورد هم راهنمایی کنید؟؟

----------


## spiderman200700

http://neo-one.ir/%d8%a7%d8%b3%d8%aa...5/#comment-456

----------


## vahid-p

نمیدونم به جوابتون رسیدید یا نه ولی من تا اونجایی که اطلاع دارم، اول اینکه MouseEvent هندل نمیشد، درسته؟

مطمئنا مشکل شما در هندل کردنش نیست. ولی تا جایی که من از کدهاتون فهمیدم ( ماشالله کم هم نیستن ) احتمالا موس لیسنر رو به null نسبت دادین. برای jTabel1 در this_windowActivated شی ازش ساختید و از طرفی در jbInt اومدید رویداد کلیک رو برای jTabel1 تعریف کردید. خب از طرفی this_windowActivated هم خودش در یه لیسنر دیگه اجرا میشه. الان میدونید مشکل چیه، jbInit میاد jTabel1 ای که هنوز شی ازش ساخته نشده و مقدارش null هست بهش لیسنر نسبت میده و بعدش jTabel ساخته میشه. البته یه نکته رو بگم WindowListener من نمیدونم چیکار میکنه، و اینکه همراه شروع برنامه صدا زده میشه یا نه، ولی فکر میکنم این مشکل وجود داره که بعد نسبت دادن لیسنر به هر حال صدا زده میشه. به نظرم بهتره jTabel1.addMouseListener رو داخل همون متد this_windowActivated و بعد از new JTanel() بنویسید نه در jbInit
موفق باشید

----------


## vahid-p

آها، یه ایراد دیگه اینه که شما اونجا که فیلد ها رو تعریف کردین :
private JTable jTable1 = new JTable();
که بهتره در کانستراکتور مینوشتید. حالا فرضا اینم هیچی، ولی باز در متذ this_windowActivated اومدید و دوباره یه شی دیگه رو به jTabel1 نسبت دادین که باعث شده جدول قبلی رها بشه. یعنی فکر میکنم دیدگاه شما اینه که MouseListener رو میشه به اسم jTabel1 نسبت داد در صورتی که اینطور نیست و هر چیزی در جاوا به شی نسبت داده میشه. یعنی شما الان دو شی ساختین، یکی در فیلد و یکی در this_windowActivated . شما با قرار دادن اسم jTabel1 به شی دوم در اصل دسترسیتون به شی اول قطع شد و شی اول بود که Listener داشت و نه شی دوم.
امیدوارم واضح گفته باشم. کافیه شما تو فیلد نیو نکنید و پس از new کردن در متد this_windowActivated بیاید و به jTabel1 لیسنر نسبت بدین.
البته من تازه کارم، اساتید تصحیح کنن هر چی اشتباه گفتم.

----------

