简体   繁体   中英

Access variable in Action Listener from class

I've been trying for days to access some variables from a class above in an ActionListener, but I fail all the time :( What am I doing wrong? I hope you can help me folks.

public class FileFrameBetterStructured extends JFrame {
protected FileModel fileModel = new FileModel(); 
{
    // Set Preferences
    setSize(500, 400);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setLocationRelativeTo(null);
    // Create table
    FileModel fileModel = new FileModel();
    JTable FileTable = new JTable(fileModel);
    TableRowSorter<TableModel> TableRowSorter = new TableRowSorter<TableModel>(fileModel);
    FileTable.setRowSorter(TableRowSorter);
    FileTable.setColumnSelectionAllowed(true);
    FileTable.setDefaultRenderer(Number.class, new BigRenderer(1000));
    JScrollPane JScrollPane = new JScrollPane(FileTable);
    getContentPane().add(JScrollPane, BorderLayout.CENTER);
    // Create textfilter
    JPanel panel = new JPanel(new BorderLayout());
    JLabel label = new JLabel("Filter");
    panel.add(label, BorderLayout.WEST);
    final JTextField filterText = new JTextField("");
    panel.add(filterText, BorderLayout.CENTER);
    add(panel, BorderLayout.NORTH);
    JButton button = new JButton("Filter");
    add(button, BorderLayout.SOUTH);
    setSize(300, 250);
    setVisible(true);      
}

public static void main(String args[]) {
    final FileFrameBetterStructured FileFrame = new FileFrameBetterStructured();

    // Integrate ActionListener for textfilter
    button.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            String text = filterText.getText();
            if (text.length() == 0) {
                TableRowSorter.setRowFilter(null);
            } else {
                TableRowSorter.setRowFilter(RowFilter.regexFilter(text));
            }
        }
    });
}
}

In the ActionListener I want to access the variables: button , filterText and TableRowSorter . THANK YOU!

Add this to the top of your class:

protected static JButton button;
protected static JTextField filterText;
protected static TableRowSorter<TableModel> TableRowSorter;

Change your code as following

public class FileFrameBetterStructured extends JFrame {
static JButton button;
static JTextField filterText;
staitc TableRowSorter<TableModel> tableRowSorter;

protected FileModel fileModel = new FileModel(); 
FileFrameBetterStructured()
{
    // Set Preferences
    setSize(500, 400);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setLocationRelativeTo(null);
    // Create table
    FileModel fileModel = new FileModel();
    JTable FileTable = new JTable(fileModel);
    tableRowSorter = new TableRowSorter<TableModel>(fileModel);
    FileTable.setRowSorter(TableRowSorter);
    FileTable.setColumnSelectionAllowed(true);
    FileTable.setDefaultRenderer(Number.class, new BigRenderer(1000));
    JScrollPane JScrollPane = new JScrollPane(FileTable);
    getContentPane().add(JScrollPane, BorderLayout.CENTER);
    // Create textfilter
    JPanel panel = new JPanel(new BorderLayout());
    JLabel label = new JLabel("Filter");
    panel.add(label, BorderLayout.WEST);
    filterText = new JTextField("");
    panel.add(filterText, BorderLayout.CENTER);
    add(panel, BorderLayout.NORTH);
    button = new JButton("Filter");
    add(button, BorderLayout.SOUTH);
    setSize(300, 250);
    setVisible(true);      
}

public static void main(String args[]) {
    final FileFrameBetterStructured FileFrame = new FileFrameBetterStructured();

    // Integrate ActionListener for textfilter
    button.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            String text = filterText.getText();
            if (text.length() == 0) {
                TableRowSorter.setRowFilter(null);
            } else {
                TableRowSorter.setRowFilter(RowFilter.regexFilter(text));
            }
        }
    });
}
}

Hope it helps.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM