Как я могу вызвать действие из другого класса в Java? Я получил класс CloseTabButton в Интернете, который позволяет простую кнопку закрытия вкладок на каждом JTabbedPane, но когда вкладка закрыта, мне хотелось бы, чтобы диалог всплывал на основе информации (если файл не сохранен, попросите его сохранить и т. Д.), , Это файл:Как вызвать действие из другого класса в Java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class CloseTabButton extends JPanel implements ActionListener {
private JTabbedPane pane;
public CloseTabButton(JTabbedPane pane, int index) {
this.pane = pane;
setOpaque(false);
// CloseIcon class just had a button with an x painted on it
Icon closeIcon = new CloseIcon();
JButton close = new JButton(closeIcon);
close.setPreferredSize(new Dimension(closeIcon.getIconWidth(), closeIcon.getIconHeight()));
close.addActionListener(this);
add(new JLabel(pane.getTitleAt(index), pane.getIconAt(index), JLabel.LEFT));
add(close);
pane.setTabComponentAt(index, this);
}
@Override
public void actionPerformed(ActionEvent e) {
int i = pane.indexOfTabComponent(this);
String fileName = pane.getToolTipTextAt(i);
// Where I want to ask if user wants to save, etc.
if (fileName == "Untitled") {
// Do stuff
}
pane.remove(i); // Removes the tab
// If tab count < 1, then disable the save and save as buttons on menu
if (pane.getTabCount() < 1) {
JFrame frame = (JFrame) pane.getParent().getParent().getParent().getParent().getParent(); // Yes, there is that many in my code to get the parent JFrame
int menuCount = frame.getJMenuBar().getMenuCount();
for (int a = 0; a < menuCount; a++) {
int itemCount = frame.getJMenuBar().getMenu(a).getItemCount();
for (int b = 0; b < itemCount; b++) {
Component component = frame.getJMenuBar().getMenu(a).getMenuComponent(b);
if (!(component instanceof JSeparator)) {
// Not a seperator
String itemName = frame.getJMenuBar().getMenu(a).getItem(b).getAccessibleContext().getAccessibleName();
if (itemName == "Save As..") {
frame.getJMenuBar().getMenu(a).getItem(b).setEnabled(false);
}
}
}
}
}
}
}
В моем главном классе у меня есть действия, перечисленные как это:
static Action Close = new AbstractAction("Close") {
public void actionPerformed(ActionEvent e) {
closeCurrentWindow(); // function that will close tab
}
}
Другие пункты меню Действия, а также, и, как вы можете видеть, что я в настоящее время делать в классе CloseTabButton довольно сложно, и, скорее всего, это неправильный способ его кодирования. Есть ли гораздо более простой способ сделать то, что я делаю?
Даже если Theres способ «триггер» команда меню, как если MENUITEM была нажата. Я стараюсь не слишком сильно менять свой код ха-ха. – Vince
Извините, я не понимаю – MadProgrammer
Я могу получить доступ к JMenuBar.Но тогда может быть способ вызвать событие щелчка меню, например ... frame.getJMenuBar.getMenu (a) .getItem (b) .click(); (Я знаю, что в Java это неверно, но в Javascript это можно сделать xD) – Vince