Oto on:
public class MainFrame extends JFrame implements ActionListener {
private FileManager fileManager;
private MainPanel panel;
private JButton modeButton1;
private JButton modeButton2;
private Border etched = BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(1,1,1,1), BorderFactory.createEtchedBorder());
private Border green = BorderFactory.createLineBorder(Color.green);
public MainFrame(FileManager pManager) {
super();
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
fileManager = pManager;
initialize();
}
@Override
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
if (command.equals("Quit")) {
System.exit(0);
} else if (command.equals("Open")) {
Skeleton skeleton = fileManager.showOpenSkeletonDialog();
if (skeleton != null) {
panel.getSkeletonEdit().unloadSkeleton();
panel.getSkeletonEdit().loadSkeleton(skeleton);
panel.repaint();
}
updateTitle();
} else if (command.equals("Save")) {
// Save menu item action
System.out.println("Save menu item clicked");
} else if (command.equals("Save as")) {
fileManager.showSaveSkeletonDialog(panel.getSkeletonEdit()
.getSkeleton());
updateTitle();
} else if (command.equals("Close")) {
panel.getSkeletonEdit().unloadSkeleton();
fileManager.clearFilename();
updateTitle();
} else if (command.equals("New")) {
panel.getSkeletonEdit().unloadSkeleton();
fileManager.clearFilename();
updateTitle();
panel.newFile();
} else if (command.equals("edit")) {
panel.getSkeletonEdit().setMode(0);
modeButton1.setBorder(BorderFactory.createCompoundBorder(green, BorderFactory.createEtchedBorder()));
modeButton2.setBorder(etched);
} else if (command.equals("animate")) {
panel.getSkeletonEdit().setMode(1);
modeButton2.setBorder(BorderFactory.createCompoundBorder(green, BorderFactory.createEtchedBorder()));
modeButton1.setBorder(etched);
}
}
/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setTitle("Editor");
JMenu menu = new JMenu("File");
menu.add(makeMenuItem("New"));
menu.add(makeMenuItem("Open"));
menu.add(makeMenuItem("Save"));
menu.add(makeMenuItem("Save as"));
menu.add(makeMenuItem("Close"));
menu.add(makeMenuItem("Quit"));
JToolBar toolbar = new JToolBar();
modeButton1 = makeToolbarButton("edit", "Edit Skeleton");
modeButton2 = makeToolbarButton("animate", "Animate Skeleton");
toolbar.add(modeButton1);
toolbar.add(modeButton2);
// Add JMenu bar
JMenuBar menuBar = new JMenuBar();
menuBar.add(menu);
setJMenuBar(menuBar);
setSize(300, 300);
setLocation(200, 200);
this.add(toolbar, BorderLayout.PAGE_START);
setVisible(true);
panel = new MainPanel(this);
this.add(panel);
}
private JMenuItem makeMenuItem(String name) {
JMenuItem m = new JMenuItem(name);
m.addActionListener(this);
return m;
}
private JButton makeToolbarButton(String command, String toolTipText) {
JButton button = new JButton();
String imgLocation = "images/" + command + ".png";
Image image = null;
try {
// Read from a file
File sourceimage = new File(imgLocation);
image = ImageIO.read(sourceimage);
} catch (IOException e) {
}
button.setActionCommand(command);
button.setToolTipText(toolTipText);
button.setBorder(etched);
button.addActionListener(this);
if (image != null) { // image found
int type = BufferedImage.TYPE_INT_ARGB;
BufferedImage dst = new BufferedImage(50, 50, type);
Graphics2D g2 = dst.createGraphics();
g2.drawImage(image, 0, 0, 50, 50, this);
g2.dispose();
button.setIcon(new ImageIcon(dst));
} else { // no image found
button.setText(command);
System.err.println("Resource not found: " + imgLocation);
}
return button;
}
private void updateTitle() {
String filename = fileManager.getFilename();
if (filename != null) {
this.setTitle("Editor (" + filename + ")");
} else {
this.setTitle("Editor");
}
}
EDIT: Właśnie wpadłem na to że wykomentowanie wszystkich toolbarów przywraca listener do życia. W jaki sposób mogę używać i jednego i drugiego?