0
자바에서 Swing을 사용하는 응용 프로그램을 작성 중이며 파일의 데이터를 디스패치하는 데 JTable을 사용합니다. JTable에 새로운 데이터를 추가하는 과정을 처리하기 위해 ActionListener를 만들었습니다. 내 애플 리케이션에서 JButton이 ActionListener를 사용하고 완벽하게 작동합니다. 하지만 JMenuBar에서 동일한 ActionListener를 버튼에 연결하면 무언가가 작동하지 않습니다. 몇 가지 조치가 있습니다 - 앱은 파일에서 데이터를로드하지만 JTable은 전혀 변경하지 않습니다. 그것은 무엇 일 수 있는가? 코드 : 당신은 B1과는 menuItem에 동일한 수신기를 추가하지 않을JMenuBar의 버튼은 JTable의 데이터를 변경할 수 없습니다.
//button that works. It locates in constructor
...
b1.addActionListener(bl);
...
//button that loads data from file, but can't update table
...
public JMenuBar createMenuBar() {
JMenuBar menuBar;
JMenu menu, submenu;
JMenuItem menuItem;
// Create the menu bar.
menuBar = new JMenuBar();
// Build the first menu.
menu = new JMenu("File");
menu.setMnemonic(KeyEvent.VK_A);
menu.getAccessibleContext().setAccessibleDescription(
"The only menu in this program that has menu items");
menuBar.add(menu);
// a group of JMenuItems
menuItem = new JMenuItem("import...", KeyEvent.VK_T);
// menuItem.setMnemonic(KeyEvent.VK_T); //used constructor instead
menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_1,
ActionEvent.ALT_MASK));
menuItem.getAccessibleContext().setAccessibleDescription(
"This doesn't really do anything");
menuItem.addActionListener(this);
menu.add(menuItem);
menuItem = new JMenuItem("add file...");
menuItem.setMnemonic(KeyEvent.VK_B);
menuItem.addActionListener(this);
menu.add(menuItem);
menuItem = new JMenuItem("open catalog");
menuItem.setMnemonic(KeyEvent.VK_B);
menuItem.addActionListener(bl);
menu.add(menuItem);
menuItem = new JMenuItem("save catalog");
menuItem.setMnemonic(KeyEvent.VK_B);
menuItem.addActionListener(b2l);
menu.add(menuItem);
// a group of radio button menu items
menu.addSeparator();
// a submenu
menu.addSeparator();
submenu = new JMenu("A submenu");
submenu.setMnemonic(KeyEvent.VK_S);
menuItem = new JMenuItem("An item in the submenu");
menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_2,
ActionEvent.ALT_MASK));
menuItem.addActionListener(this);
submenu.add(menuItem);
menuItem = new JMenuItem("Another item");
menuItem.addActionListener(this);
submenu.add(menuItem);
menu.add(submenu);
// Build second menu in the menu bar.
menu = new JMenu("Edit");
menu.setMnemonic(KeyEvent.VK_N);
menu.getAccessibleContext().setAccessibleDescription(
"This menu does nothing");
menuBar.add(menu);
return menuBar;
}
...
private static void createAndShowGUI() {
// Create and set up the window.
JFrame frame = new JFrame("Media Cataloguer");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MainInterface dm = new MainInterface();
frame.setJMenuBar(dm.createMenuBar());
...
...
//mutual ActionListener
class ButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
//loading of array with data
CatalogueLoader loader = new CatalogueLoader("test.ctlg");
try {
Object[][] ctlgData = loader.readCtlg();
for (int i = 0; i < loader.size; i++) {
for (int j = 0; j < 5; j++) {
table.setValueAt(ctlgData[i][j], i, j);
}
}
} catch (IOException ex) {
}
}
}
private ButtonListener bl = new ButtonListener();
약간의 코드, 최소한 ActionListener를 표시해야합니다. –
버튼은 버튼입니다 버튼입니다. 버튼의 위치와 관계없이 완벽하게 작동해야합니다. – fireshadow52
죄송합니다. 일부 코드 –