簡體   English   中英

我不明白為什么我的ActionListeners在按JButton時不工作?

[英]I don't understand why my ActionListeners are not working when pressing JButton?

我使用動作偵聽器,然后將其調用到一個中繼函數的類。 我不想在類中使用implements ActionListener ,因為處理多個按鈕更復雜。 你可以從ActionListener訪問一個方法嗎?

我也得到了Serializable的警告。 我不確定這意味着什么。 我壓制了警告並在網上查了一下,但是,我仍然不了解它的情況。 第一個GUI項目,非常感謝任何幫助。

import javax.swing.*;
import javax.swing.table.DefaultTableModel;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


public class GUI extends JFrame{
    public JFrame j;
    public JPanel p;
    public JButton NEW;
    public JButton update;
    public DefaultTableModel model;
    public JTable jt;

    public GUI(){
        setVisible(true);
        setSize(600,400);
        setTitle("Student Record Management System");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel p = new JPanel();
        JButton NEW = new JButton("Additional Student");
        NEW.setBounds(10,10,20,20);
        NEW.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                NEWpressed();
            }
        });
        p.add(NEW);
        JButton update = new JButton("Update Exam Scores");
        update.setBounds(50,40,20,20);
        update.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                updatepressed();
            }
        });
        p.add(update);
        String [] col = {"Last Name", "First Name", "HKID", "Student ID", "Final Exam Score"};
        String [][] data = {{"Rollins", "Zachary", "1234", "4321", "88"},{"Preston","John", "4321", "1234", "94"}};
        DefaultTableModel model = new DefaultTableModel(data, col);
        JTable jt = new JTable(model);
        jt.setEnabled(false);
        jt.setPreferredScrollableViewportSize(new Dimension(400,300));
        jt.setFillsViewportHeight(true);
        jt.setBackground(Color.BLUE);
        jt.setAlignmentY(BOTTOM_ALIGNMENT);
        JScrollPane jps = new JScrollPane(jt);
        p.add(jps);
        add(p);
    }
    public void NEWpressed(){
        model.addRow(new Object[]{"col 1", "col 2", "col 3", "col 4", "col 5"});
    }
    public void updatepressed(){
        jt.setEnabled(true);
        p.add(jt);
        add(p);
    }
    public static void main(String args []){
        GUI a = new GUI();
        a.setVisible(true);

    }

}

是的,您可以從onclicklistener調用方法,但問題出在您調用的方法中

model.addRow()

在DefaultTableModel上尚未定義。 在調用press方法之前初始化“model”變量。

你的主要問題是你正在掩蓋你的變量......

您將model定義為實例變量

public DefaultTableModel model;

但是在構造函數中,您定義了一個同名的局部變量......

DefaultTableModel model = new DefaultTableModel(data, col);

這意味着當NEWpressed時, modelnull

您還將pjt定義為實例變量

public JTable jt;
public JPanel p;

但是在構造函數中,您定義了一個同名的局部變量......

JPanel p = new JPanel();
//...
JTable jt = new JTable(model);

當這意味着updatepressed按下jtpnull

丟失本地定義並簡單地在構造函數中實例化實例變量......

public GUI() {
    p = new JPanel();
    //...
    model = new DefaultTableModel(data, col);
    //...
    jt = new JTable(model);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM