2015-04-04 3 views
1

Я пытаюсь сделать кнопку в классе, который удаляет что-то из таблицы. Я работаю, когда он не находится в отдельном классе. Однако, когда я пытаюсь переместить код в новый класс и создать объект этого класса в моем основном методе, кнопка не работает. Я довольно новичок в использовании Swing, поэтому любая помощь будет высоко оценена.Java jbutton в другом классе

public abstract class RemoveButton extends frame implements ActionListener { 
    public void actionPerformed(ActionEvent arg0) { 
    DefaultTableModel model = (DefaultTableModel) table.getModel(); 
     if (table.getSelectedRow() == -1) { 
     if (table.getRowCount() == 0) { 
      Mess.setText("Table is empty"); 
     } else { 
      Mess.setText("You need to select"); 
     } 
     } else { 
     model.removeRow(table.getSelectedRow()); 
     } 
    } 
    } 
} 

Этот класс является кнопкой, которая должна удалить гостя. Я расширил фрейм, потому что именно здесь большинство моих переменных. Отсюда я не уверен, как назвать это основным методом и заставить его работать. Все импорт добавлен.

+0

«кнопка не работает». Что это значит? Есть ли исключение? Где трассировка стека? – MarsAtomic

+0

он не удаляет гостя в таблице, никакое исключение не бросается, кнопка просто не работает, когда я помещаю этот код в другой класс. – user3423784

+0

Я подозреваю, что вы используете наследование в неверных целях. Почему этот класс расширяет фрейм? Получать доступ к полям и методам кадра? Если это так, это не то, что вы должны делать. Вместо этого вам нужно передать ссылку на фрейм в класс и вызвать его методы. Кроме того, почему абстрактный класс? –

ответ

2

Я собираюсь угадать здесь, что мы вынуждены делать, так как вопрос, написанный в настоящее время, является неполным, но я подозреваю, что вы злоупотребляете наследованием. Я предполагаю, что ваш основной графический интерфейс принадлежит классу фреймов (который должен быть переименован в соответствии со стандартами Java, так что это первая буква в верхнем регистре) и делают это, чтобы этот класс мог вызывать методы и поля доступа класса кадра. Если это так, то вы используете наследование для неправильной цели, поскольку экземпляр «frame», содержащийся в RemoveButton, уникален и полностью отличается от экземпляра фрейма, который отображается.

Вместо этого вы должны передать в этот класс ссылку на фактический отображаемый объект кадра, а затем вызвать методы на этом объекте по мере необходимости.

например,

// why abstract? I've removed that 
// no longer extends frame 
public class RemoveButton implements ActionListener { 
    // I've renamed your frame class to "MyFrame" 
    private MyFrame myFrame; 

    // constructor that allows you to pass in MyFrame reference 
    public RemoveButton(MyFrame myFrame) { 
     this.myFrame = myFrame; // assign to field 
    } 

    public void actionPerformed(ActionEvent evt) { 
     JTable table = myFrame.getTable(); // give MyFrame this method 
     DefaultTableModel model = (DefaultTableModel) table.getModel(); 
     // .... etc 
    }  
} 

очиститель будет использовать шаблон проектирования MVC, но это потребует немного более предварительной работы.

Смежные вопросы