Just started out using Java and am a beginner. I tried to create a photo viewer which can search a directory for an image and open the image but my program won't display the image.
When i run the program, it opens up and shows a menubar which i use to search my directories, but even if i select an image it won't display. TIA.
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.imageio.ImageIO;
public class ICS
{
private JPanel gui;
private JFileChooser fileChooser;
FilenameFilter fileNameFilter;
private JMenuBar menuBar;
DefaultListModel model;
public ICS() {
gui = new JPanel(new GridLayout());
final JLabel imageView = new JLabel();
gui.add(imageView);
fileChooser = new JFileChooser();
String[] imageTypes = ImageIO.getReaderFileSuffixes();
menuBar = new JMenuBar();
JMenu menu = new JMenu("GET PHOTO HERE");
menuBar.add(menu);
JMenuItem browse = new JMenuItem("browse");
menu.add(browse);
browse.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae) {
int result = fileChooser.showOpenDialog(gui);
if (result==JFileChooser.APPROVE_OPTION) {
File eg = fileChooser.getSelectedFile();
}
}
});
}
public void loadImages(File directory) throws IOException {
File[] imageFiles = directory.listFiles(fileNameFilter);
BufferedImage[] images = new BufferedImage[imageFiles.length];
}
public Container getGui() {
return gui;
}
public JMenuBar getMenuBar() {
return menuBar;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
public void run() {
ICS imageList = new ICS();
JFrame f = new JFrame("Image Browser");
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.add(imageList.getGui());
f.setJMenuBar(imageList.getMenuBar());
f.setLocationByPlatform(true);
f.pack();
f.setSize(800,600);
f.setVisible(true);
}
});
}
}
You're not doing anything with your selected file. Given that you have an empty JLabel in your JPanel, you could simply set the Icon for that component:
imageView.setIcon(new ImageIcon(eg.getPath()));
It's not doing anything with the image because you've never told it to. In your action listener, you've created a file chooser and gotten the selected file, but you never do anything with it. You just define it as a local variable inside the action listener, which is then immediately destroyed when your listener exits.
What you should be doing is, inside of your action listener, make a function call that actually displays your image after you retrieve the file the user selected.
Also, ICS is a terrible name for a class. You should be descriptive of your class names for your own reference and sanity when your program gets larger and you're trying to remember what everything did.
Related
I am trying to make a on-screen keyboard for Windows using Java.
The result I am looking for is somewhat similar to the tablet PC
input panel (Touch Keyboard Mode) on Windows 7 except that mine will
be Bengali.
But I cannot figure out how to send data from the program (when the
user presses the on-screen buttons) such that it can serve as
input for another program (say, a text editor).
This link seems useful but I cannot understand it.
How can I achieve this?
My current code is:
import javax.swing.UIManager.LookAndFeelInfo;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import javax.swing.border.Border;
import javax.swing.*;
public class Bengali extends JFrame {
private JMenuBar menuBar;
private JButton[][] buttons;
private int i,j;
private String hex;
//Constructor
public Bengali(){
this.setTitle("GUI_project");
this.setSize(1600,140);
//menu generate method
generateMenu();
this.setJMenuBar(menuBar);
//pane with null layout
JPanel contentPane = new JPanel(null);
contentPane.setPreferredSize(new Dimension(1600,140));
contentPane.setBackground(new Color(192,192,192));
buttons=new JButton[4][32];
for(i=0;i<4;i++)
{
for(j=0;j<32;j++)
{
buttons[i][j]=new JButton();
buttons[i][j].setBounds(0+50*j,0+35*i,50,35);
buttons[i][j].setBackground(new Color(214,217,223));
buttons[i][j].setForeground(new Color(0,0,0));
buttons[i][j].setEnabled(true);
buttons[i][j].setFont(new Font("sansserif",0,12));
hex = "u"+Integer.toHexString(i+2432);
buttons[i][j].setText(hex);
buttons[i][j].setVisible(true);
//Set methods for mouse events
//Call defined methods
buttons[i][j].addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent evt) {
but(evt,i,j);
}
});
//adding components to contentPane panel
contentPane.add(buttons[i][j]);
}
//adding panel to JFrame and seting of window position and close operation
this.add(contentPane);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.pack();
this.setVisible(true);
}
}
//Method mouseClicked for buttons[i][j]
private void but (MouseEvent evt,int i,int j)
{
//TODO
}
//method for generate menu
public void generateMenu()
{
menuBar = new JMenuBar();
JMenu file = new JMenu("File");
JMenu tools = new JMenu("Tools");
JMenu help = new JMenu("Help");
JMenuItem open = new JMenuItem("Open ");
JMenuItem save = new JMenuItem("Save ");
JMenuItem exit = new JMenuItem("Exit ");
JMenuItem preferences = new JMenuItem("Preferences ");
JMenuItem about = new JMenuItem("About ");
file.add(open);
file.add(save);
file.addSeparator();
file.add(exit);
tools.add(preferences);
help.add(about);
menuBar.add(file);
menuBar.add(tools);
menuBar.add(help);
}
public static void build(){
System.setProperty("swing.defaultlaf", "com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
new Bengali();
}
});
}
}
The GUI is somewhat ready. Made using SimpleGUI extension for BlueJ.
You can use PipedInputStream and PipedOutputStream classes.
Whenever an event has occurred you have to write to the output stream and you should have a listener for input stream. You may have run these in two different threads.
example snippet:
PipedInputStream pis = new PipedInputStream();
PipedOutputStream pos = new PipedOutputStream(pis);
You should start the listener thread first in case if you don't want to lose any data.
This can very easily be done with the Robot class. You have to simulate key presses (and not "write to any input stream" as this cannot work).
This post's accepted answer describes this very well:
Press a key with Java
I'm trying to use a few JDialogs inside my form JPanel to notify the user of incorrect data and form submission.
I'm just a bit confused with the JDialog constructor. I'd want to link the dialog to the panel (only because that's where it's created), but obviously the only owner parameters that are allowed are top level Frames (which I don't think I can access from the JPanel), or a Dialog (which I can't see helping me).
I could pass a reference for the Frame down to the JPanel, but isn't that a bit strange design wise? Or am I misunderstanding the class, or just more generally where the JDialog should be instantiated?
Hope I've made myself clear, I can make a sscce if it helps. Thanks.
the only owner parameters that are allowed are top level Frames (which I don't think I can access from the JPanel
You can access the parent frame of the panel by using:
Window window = SwingUtilities.windowForComponent( yourPanelHere );
Then just use the window as the owner of the dialog.
JComponent.getTopLevelAncestor gives you the owner of the JPanel:
Returns the top-level ancestor of this component (either the
containing Window or Applet), or null if this component has not been
added to any container.
You can try it:
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
public class DialogTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
EventQueue.invokeLater(new Runnable() {
public void run() {
DialogFrame frame = new DialogFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
/**
* Frame contains menu. When we choose menu "File-> About" JDialog will be shown
*/
class DialogFrame extends JFrame {
public DialogFrame() {
setTitle("DialogTest");
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
// Menu
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
JMenu fileMenu = new JMenu("File");
menuBar.add(fileMenu);
// Add About & Exit.
// Choose About - > About
JMenuItem aboutItem = new JMenuItem("About");
aboutItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
if (dialog == null) //if not
{
dialog = new AboutDialog(DialogFrame.this);
}
dialog.setVisible(true); // to show dialog
}
});
fileMenu.add(aboutItem);
// When Exit
JMenuItem exitItem = new JMenuItem("Exit");
exitItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
System.exit(0);
}
});
fileMenu.add(exitItem);
}
public static final int DEFAULT_WIDTH = 300;
public static final int DEFAULT_HEIGHT = 200;
private AboutDialog dialog;
}
/*
* Modal dialog waits on click
*/
class AboutDialog extends JDialog {
public AboutDialog(JFrame owner) {
super(owner, "About DialogTest", true);
// Mark with HTML centration
add(new JLabel(
"<html><h1><i>Все о Java</i></h1><hr>"
+ "Something about java and JDialog</html>"),
BorderLayout.CENTER);
// When push "ok" dialog window will be closed
JButton ok = new JButton("ok");
ok.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
setVisible(false);
}
});
// Button ОК down of panel
JPanel panel = new JPanel();
panel.add(ok);
add(panel, BorderLayout.SOUTH);
setSize(260, 160);
}
}
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions asking for code must demonstrate a minimal understanding of the problem being solved. Include attempted solutions, why they didn't work, and the expected results. See also: Stack Overflow question checklist
Closed 9 years ago.
Improve this question
Does anyone have any example code to make a draggable menu?
I am new to Java and I am trying to find a way to make a menu that is draggable with the mouse. Like a lot of programs have. You can drag the top menu bar around the screen so that you can drop it in other locations. I think that Java can do this as well because I have seen some applications that I think were written in Java do this very same thing.
Question: How do I create a draggable menu in a JFrame in Java?
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.SwingUtilities;
public class MyExample extends JFrame {
public MyExample() {
initUI();
}
public final void initUI() {
JMenuBar menubar = new JMenuBar();
JMenu file = new JMenu("File");
file.setMnemonic(KeyEvent.VK_F);
JMenuItem eMenuItem = new JMenuItem("Exit");
eMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
System.exit(0); //exit the system
}
});
file.add(eMenuItem);
menubar.add(file);
setJMenuBar(menubar);
setTitle("My Menu");
setSize(300, 100);
setLocationRelativeTo(); //I tried draggable
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args) {
MyExample e = new MyExample();
e.setVisible(true);
}
}
I want to be able to drag the menu from the top of the JFrame to another location out of the window and leave it there. I have used Toolbar and that worked good but I was trying to see if this can be done with a menu. If you look at any software application the usually is a grabable area right next tot he File location. This you can click and drag around the area.
ImageIcon icon = new ImageIcon(getClass().getResource("10cd.jpg"));
JMenu file1 = new JMenu("File");
file1.setMnemonic(KeyEvent.VK_F);
JMenu file2 = new JMenu("Open");
file2.setMnemonic(KeyEvent.VK_F);
JMenu file3 = new JMenu("A");
file3.setMnemonic(KeyEvent.VK_F);
JMenu file4 = new JMenu("B");
file4.setMnemonic(KeyEvent.VK_F);
JMenu file5 = new JMenu("C");
file5.setMnemonic(KeyEvent.VK_F);
JMenu file6 = new JMenu("D");
file6.setMnemonic(KeyEvent.VK_F);
JMenuItem eMenuItem1a = new JMenuItem("File 1"/*, icon*///);
/*eMenuItem1a.setMnemonic(KeyEvent.VK_E);
eMenuItem1a.setToolTipText("Exit application");
JMenuItem eMenuItem1b = new JMenuItem("File 2"/*, icon*///);
/* eMenuItem1b.setMnemonic(KeyEvent.VK_E);
eMenuItem1b.setToolTipText("Exit application");
JMenuItem eMenuItem1c = new JMenuItem("File 3"/*, icon*///);
/* eMenuItem1c.setMnemonic(KeyEvent.VK_E);
eMenuItem1c.setToolTipText("Exit application");
JMenuItem eMenuItem2 = new JMenuItem("Exit"/*, icon*///);
/* eMenuItem2.setMnemonic(KeyEvent.VK_E);
eMenuItem2.setToolTipText("Exit application");
JMenuItem eMenuItem3 = new JMenuItem("Exit"/*, icon*///);
/*eMenuItem3.setMnemonic(KeyEvent.VK_E);
eMenuItem3.setToolTipText("Exit application");
JMenuItem eMenuItem4 = new JMenuItem("Exit"/*, icon*///);
/*eMenuItem4.setMnemonic(KeyEvent.VK_E);
eMenuItem4.setToolTipText("Exit application");
eMenuItem1a.addActionListener(new myListenerOne());
eMenuItem1b.addActionListener(new myListenerTwo());
eMenuItem1c.addActionListener(new myListenerThree());
eMenuItem2.addActionListener(new myListenerOne());
eMenuItem3.addActionListener(new myListenerTwo());
eMenuItem4.addActionListener(new myListenerThree());
file1.add(eMenuItem1a);
file1.add(eMenuItem1b);
file1.add(eMenuItem1c);
file2.add(eMenuItem2);
file3.add(eMenuItem3);
file4.add(eMenuItem4);
menubar.add(file1);
menubar.add(file2);
menubar.add(file3);
menubar.add(file4);
menubar.add(file5);
menubar.add(file6);
setJMenuBar(menubar);
//Actionlisteners below
class myListenerOne implements ActionListener {
#Override
public void actionPerformed(ActionEvent e) {
System.out.println("Action Class Listener 1");
System.exit(0);
}
}
class myListenerTwo implements ActionListener {
#Override
public void actionPerformed(ActionEvent e) {
System.out.println("Action Class Listener 2");
System.exit(0);
}
}
class myListenerThree implements ActionListener {
#Override
public void actionPerformed(ActionEvent e) {
System.out.println("Action Class Listener 3");
System.exit(0);
}
}
Here is another menu example that I forgot to include this morning. Was sick and just didn't think about it actually. Anyway, what I was wondering was if the menu could be set to a movable menu, so that when you click on it and drag it that it can be moved to any where in the frame. I have seen this done on some java applications I have used but just haven't seen it in a while.
import javax.swing.JToolBar;
import javax.swing.JButton;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import java.net.URL;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ToolBarDemo extends JPanel
implements ActionListener {
protected JTextArea textArea;
protected String newline = "\n";
static final private String PREVIOUS = "previous";
static final private String UP = "up";
static final private String NEXT = "next";
public ToolBarDemo() {
super(new BorderLayout());
//Create the toolbar.
JToolBar toolBar = new JToolBar("Still draggable");
addButtons(toolBar);
//Create the text area used for output. Request
//enough space for 5 rows and 30 columns.
textArea = new JTextArea(5, 30);
textArea.setEditable(false);
JScrollPane scrollPane = new JScrollPane(textArea);
//Lay out the main panel.
setPreferredSize(new Dimension(450, 130));
add(toolBar, BorderLayout.PAGE_START);
add(scrollPane, BorderLayout.CENTER);
}
protected void addButtons(JToolBar toolBar) {
JButton button = null;
//first button
button = makeNavigationButton("Back24", PREVIOUS,
"Back to previous something-or-other",
"Previous");
toolBar.add(button);
//second button
button = makeNavigationButton("Up24", UP,
"Up to something-or-other",
"Up");
toolBar.add(button);
//third button
button = makeNavigationButton("Forward24", NEXT,
"Forward to something-or-other",
"Next");
toolBar.add(button);
}
protected JButton makeNavigationButton(String imageName,
String actionCommand,
String toolTipText,
String altText) {
//Look for the image.
String imgLocation = imageName + ".gif";
URL imageURL = ToolBarDemo.class.getResource(imgLocation);
//Create and initialize the button.
JButton button = new JButton();
button.setActionCommand(actionCommand);
button.setToolTipText(toolTipText);
button.addActionListener(this);
if (imageURL != null) { //image found
button.setIcon(new ImageIcon(imageURL, altText));
} else { //no image found
button.setText(altText);
System.err.println("Resource not found: "
+ imgLocation);
}
return button;
}
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
String description = null;
// Handle each button.
if (PREVIOUS.equals(cmd)) { //first button clicked
description = "taken you to the previous <something>.";
} else if (UP.equals(cmd)) { // second button clicked
description = "taken you up one level to <something>.";
} else if (NEXT.equals(cmd)) { // third button clicked
description = "taken you to the next <something>.";
}
displayResult("If this were a real app, it would have "
+ description);
}
protected void displayResult(String actionDescription) {
textArea.append(actionDescription + newline);
textArea.setCaretPosition(textArea.getDocument().getLength());
}
/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event dispatch thread.
*/
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("Doug's Test ToolBarDemo!!!!");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Add content to the window.
frame.add(new ToolBarDemo());
//Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
//Schedule a job for the event dispatch thread:
//creating and showing this application's GUI.
SwingUtilities.invokeLater(new Runnable() {
public void run() {
//Turn off metal's use of bold fonts
UIManager.put("swing.boldMetal", Boolean.FALSE);
createAndShowGUI();
}
});
}
}
The following code adds a JToolBar to the frame. I like this because it is draggable but it looks different than a regular menu. I was more interested in if you could set a menu to draggable.
Try using a JToolBar if you don't want to create your own floating window.
http://docs.oracle.com/javase/tutorial/uiswing/components/toolbar.html
I've looked through the swing tutorials and i do not see what i'm doing wrong. Why is nothing happening when i click on the jmenuitem?
my first class:
import javax.swing.*;
public class WordProcess{
/*TODO: make program end on close
*/
public static void main(String[] args) {
MainFrame frame = new MainFrame("Word Processor", 10000, 10000);
}
}
second class:
import javax.swing.*;
public class MainFrame extends JFrame {
JMenuBar menubar = new JMenuBar();
public MainFrame(String name, int x, int y) {
setTitle(name);
setSize(x, y);
setVisible(true);
setJMenuBar(menubar);
//creates file menu and adds to menubar
//TODO populate with JMenuItems
JMenu filemenu = new JMenu("file");
filemenu.setVisible(true);
menubar.add(filemenu);
buttonnew buttonnew = new buttonnew("new");
buttonnew.setVisible(true);
filemenu.add(buttonnew);
}
}
and third class:
import javax.swing.*;
import java.awt.event.*;
public class buttonnew extends JMenuItem implements ActionListener{
buttonnew(String s) {
super();
super.setText(s);
addActionListener(this);
}
#Override
public void actionPerformed(ActionEvent ae) {
JFrame newframe = new JFrame("sup");
}
}
When the button is pressed, it will create an empty, invisible JFrame. You won't see it, since you have not called setVisible() on it, and it's tiny, as it has no contents. Otherwise, the code is fine.
I wanted to add a scrollbar to my photo viewer but the it gives me the error that a non static variable cannot be referenced from a static context.
To be exact, I'm trying to add a scrollbar to a JPanel. Also, if I make JScrollPane scrollBar a static variable, then the photo wont appear. TIA
import java.awt.Container;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.DefaultListModel;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.ImageIcon;
import javax.swing.SwingUtilities;
import javax.swing.JScrollPane;
public class PhotoViewer
{
// Instance fields.
private FilenameFilter fileNameFilter;
private JFileChooser fileChooser;
private JMenuBar menuBar;
private JPanel mainPanel;
private static JScrollPane scrollBar;
public PhotoViewer() // Constructor.
{
// Main JPanel with a grid style layout.
mainPanel = new JPanel(new GridLayout());
// Jlabel to display photo on.
final JLabel imageView = new JLabel();
// Adds the JLabel ontop of the JPanel.
mainPanel.add(imageView);
// Adds a scroll bar.
scrollBar = new JScrollPane(mainPanel);
scrollBar.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollBar.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
// Creates a file chooser to find a photo.
fileChooser = new JFileChooser();
// Creates a new menubar at the top of the JPanel.
menuBar = new JMenuBar();
// Adds a menu within the JMenuBar.
JMenu menu = new JMenu("View new photo");
// Adds the additional menu ontop of the original JMenuBar.
menuBar.add(menu);
// Option to browse for a new photo.
JMenuItem browse = new JMenuItem("Browse");
// Adds the browse option ontop of the 'View new photo' button.
menu.add(browse);
// Creates an actionlistener to follow what the user is doing.
browse.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
int result = fileChooser.showOpenDialog(mainPanel);
// Displays the image if approved by JFileChooser.
if (result==JFileChooser.APPROVE_OPTION)
{
// Obtains the selected file by the user.
File singleImage = fileChooser.getSelectedFile();
try
{
// Displays the image if no exception.
Image displayImage = ImageIO.read(singleImage);
imageView.setIcon(new ImageIcon(displayImage));
} catch(Exception e)
{
// Displays the exception caught by the program in a JOptionPane window.
e.printStackTrace();
JOptionPane.showMessageDialog(mainPanel, e, "Load failure!", JOptionPane.ERROR_MESSAGE);
}
}
}
});
} // end of constructor PhotoViewer
public void loadImages(File directory) throws IOException
{
// Throws an exception to be caught.
File[] imageFiles = directory.listFiles(fileNameFilter);
BufferedImage[] images = new BufferedImage[imageFiles.length];
} // end of method loadImages(File directory)
public Container getPanel()
{
// Hands execution back to the mainPanel function.
return mainPanel;
}// end of method getPanel()
public JMenuBar getMenuBar()
{
// Hands execution back to the menuBar function.
return menuBar;
}// end of method getMenuBar()
public JScrollPane getScrollBar()
{
// Hands execution back to the menuBar function.
return scrollBar;
}// end of method getScrollBar()
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
// Input all the compoenents of the photo viewer to the JFrame to display them.
PhotoViewer imageList = new PhotoViewer();
// Creates a new JFrame to display everything.
JFrame mainFrame = new JFrame("Photo Viewer");
// 'Throws away' the JFrame on close.
mainFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
// Adds all the different components to the JFrame.
mainFrame.add(imageList.getPanel());
mainFrame.add(imageList.getScrollBar());
mainFrame.setJMenuBar(imageList.getMenuBar());
mainFrame.setLocationByPlatform(true);
// Packs all the components into the JFrame.
mainFrame.pack();
// Sets the size of the JFrame.
mainFrame.setSize(1500,1500);
// Allows us to see the JFrame.
mainFrame.setVisible(true);
}
});
} // end of method main(String[] args)
} // end of class PhotoViewer
There is no need to add mainPanel and scrollBar separately, as scrollBar already contains mainPanel. Just execute mainFrame.add(imageList.getScrollBar()); and don't call mainFrame.add(imageList.getPanel()); at all. A single control can be added only to one container.
Default layout of JFrame is BorderLayout. When you add controls to BorderLayout without specifying layout constraint it places the control in BorderLayout.CENTER, effectively replacing whatever there was before.
Just a minor change to your code :)
instead of
scrollBar = new JScrollPane(mainPanel);
use
scrollBar = new JScrollPane(imageView);
mainPanel.add(scrollBar);
and there is no need for
mainFrame.add(imageList.getScrollBar());