Why i'm getting a white area beside jmenubar?

86 views Asked by At

I'm trying to create a dialog box which contains two splitPanel and a menu bar. Both of the splitPanel contain jlist.

But when i run my code i get white area beside the menu bar .In the picture below a white area is created beside Organize.

enter image description here

Here is my part of the code:

   public class HistList extends JPanel {
JTable table = new JTable();
 JMenuItem remove = new JMenuItem("Remove");
JScrollPane scrollPane = new JScrollPane();
MyTableModel model = new MyTableModel();

HistList() {
    try {
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
        ex.printStackTrace();
    }
    String[] title = {" ", "Time", "Name", "Location"};
    Object[][] data = {
        {false, "01:22:16", "Google", "http://www.google.com"},
        {false, "01:22:16", "Yahoo - login", "https://login.yahoo.com/?.src=ym&.intl=us&.lang=en-US&.done=https%3a//mail.yahoo.com"},
        {false, "01:22:29", "Oracle | Integrated Cloud Applications and Platform Services", "https://www.oracle.com/index.html"}
    };
    for (int i = 0; i < data.length; i++) {
        model.addRow(data[i]);
    }
    this.table = new JTable(model);
    this.table.setShowGrid(false);
    this.scrollPane = new JScrollPane(this.table);
    Dimension size = new Dimension(510, 380);
    this.scrollPane.setPreferredSize(size);
    this.scrollPane.getViewport().setBackground(Color.WHITE);
    JTextField name = new JTextField();
    name.setPreferredSize(new Dimension(scrollPane.getWidth(), 25));
    JTextField locationText = new JTextField();
    locationText.setPreferredSize(new Dimension(scrollPane.getWidth(), 25));
    JPanel textPane = new JPanel();
    JLabel nameLabel = new JLabel("Name:");
    JPanel textPane1 = new JPanel();
    textPane1.setLayout(new BoxLayout(textPane1, BoxLayout.X_AXIS));
    textPane1.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
    textPane1.add(Box.createHorizontalGlue());
    textPane1.add(nameLabel);
    textPane1.add(Box.createRigidArea(new Dimension(21, 0)));
    textPane1.add(name);
    JLabel locationLabel = new JLabel("Location:");
    JPanel textPane2 = new JPanel();
    textPane2.setLayout(new BoxLayout(textPane2, BoxLayout.X_AXIS));
    textPane2.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
    textPane2.add(Box.createHorizontalGlue());
    textPane2.add(locationLabel);
    textPane2.add(Box.createRigidArea(new Dimension(5, 0)));
    textPane2.add(locationText);
    textPane.setLayout(new BoxLayout(textPane, BoxLayout.Y_AXIS));
    textPane.setBorder(BorderFactory.createEmptyBorder(0, 2, 2, 2));
    textPane.add(Box.createVerticalGlue());
    textPane.add(textPane1);
    textPane.add(Box.createRigidArea(new Dimension(0, 5)));
    textPane.add(textPane2);
    JPanel contentPane = new JPanel();
    contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.Y_AXIS));
    contentPane.add(scrollPane);
    contentPane.setBorder(BorderFactory.createEmptyBorder(0, 2, 2, 2));
    contentPane.add(Box.createVerticalGlue());
    contentPane.add(Box.createRigidArea(new Dimension(0, 5)));
    contentPane.add(textPane);
    JPanel pane = new JPanel(new BorderLayout());
    pane.setBorder(BorderFactory.createEmptyBorder(15, 0, 0, 0));
    pane.setBackground(Color.WHITE);
    String[] dates = {"12/15/2016", "12/30/2016"};
    JList list;
    list = new JList(dates);
    list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
    JLabel label = new JLabel("Browsing Date");
    pane.add(label, BorderLayout.NORTH);
    pane.add(list, BorderLayout.WEST);
    pane.setPreferredSize(new Dimension(150, 380));
    JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, pane, contentPane);
    JMenuBar organize = new JMenuBar();
    organize.setOpaque(true);
    organize.setBackground(getBackground());
    JMenu menu = new JMenu("Organize");
    menu.add(remove);
    remove.setEnabled(false);
    menu.setOpaque(true);
    menu.setBackground(getBackground());
    menu.setIcon(new ImageIcon(Hello.class.getResource("/rsz_todo-512.png")));
    organize.add(menu);
    JPanel finale = new JPanel(new BorderLayout());
    finale.setOpaque(true);
    finale.add(organize,BorderLayout.NORTH);
    finale.add(splitPane,BorderLayout.CENTER);
    setOpaque(true);
    add(finale);
}

I can't figure out what is creating this white area. I'm quite new in this section. Can anyone please help me to fix it? Please forgive me for my silly question. Thanks in advance.

1

There are 1 answers

0
camickr On BEST ANSWER

But when i run my code i get white area beside the menu bar

finale.add(organize,BorderLayout.NORTH);

Don't add the menu bar to the content pane of the frame.

A JFrame has a special place reserved for the menu bar.

  1. Read the JFrame API to find the appropriate method

  2. Read the section from the Swing tutorial on How to Use Menus for more information and working examples.

Note the working examples from the Swing tutorial will help you better structure your code so that you GUI components are created on the Event Dispatch Thread (EDT).

The code is also more in the form of an MCVE although even the code in the examples is excessive. Since you question is about a menu bar all you need is the JFrame, a JMenuBar and a JMenu to demonstrate your stated problem.

Keep a link to the tutorial handy for examples of all Swing basics.