Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JList java resize

Tags:

java

swing

jlist

I have a problem with a JList. When I select an item, it resizes itself. How can I set the JList to a fixed size?

Here is a screenshot before I selected anything

Screenshot before

and this is after

Screenshot after

Here is my code:

public class AgendaView extends JFrame {

    private JLabel firstNameLabel, lastNameLabel, adressLabel, phoneNumberLabel, extraInfoLabel;
    private Button editButton, addButton, deleteButton, showButton;
    private JPanel labels, gui, buttons;
    private DefaultListModel model;
    private JList list;
    private JMenuBar menuBar;
    private JMenu menu;
    private JMenuItem newItem, saveItem, saveAsItem, exitItem, openItem;
    private Agenda agenda;
    private JScrollPane scrollPane;

    public AgendaView() {

        super("***Agenda View***");

        menuBar = new JMenuBar();
        menu = new JMenu("Menu");
        menu.add(new JSeparator());
        newItem = new JMenuItem("New");
        saveItem = new JMenuItem("Save");
        saveItem.setEnabled(false);
        saveAsItem = new JMenuItem("Save as..");
        saveAsItem.setEnabled(false);
        exitItem = new JMenuItem("Exit");
        openItem = new JMenuItem("Open");
        saveItem.add(new JSeparator());
        exitItem.add(new JSeparator());
        menu.add(newItem);
        menu.add(openItem);
        menu.add(saveItem);
        menu.add(saveAsItem);
        menu.add(exitItem);

        gui = new JPanel(new BorderLayout(2, 2));
        gui.setBorder(new TitledBorder("Owner"));

        labels = new JPanel(new GridLayout(0, 1, 1, 1));
        labels.setBorder(new TitledBorder("Contact "));

        buttons = new JPanel(new GridLayout(1, 0, 1, 1));

        editButton = new Button("Edit");
        addButton = new Button("Add");
        deleteButton = new Button("Delete");
        showButton = new Button("Show");

        editButton.setEnabled(false);
        addButton.setEnabled(false);
        deleteButton.setEnabled(false);
        showButton.setEnabled(false);

        buttons.add(showButton);
        buttons.add(editButton);
        buttons.add(addButton);
        buttons.add(deleteButton);

        firstNameLabel = new JLabel("First name: ");
        lastNameLabel = new JLabel("Last name: ");
        adressLabel = new JLabel("Adress: ");
        phoneNumberLabel = new JLabel("Phone number: ");
        extraInfoLabel = new JLabel("Extra info: ");

        labels.add(firstNameLabel);
        labels.add(lastNameLabel);
        labels.add(adressLabel);
        labels.add(phoneNumberLabel);
        labels.add(extraInfoLabel);

        model = new DefaultListModel();
        list = new JList(model);
        list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        list.setVisibleRowCount(-1);
        list.addListSelectionListener(
                new ListSelectionListener() {
                    @Override
                    public void valueChanged(ListSelectionEvent lse) {
                        String name = list.getSelectedValue().toString();
                        String[] split = name.split(" ");
                        Contact contact = agenda.searchContactbyName(split[0], split[1]);
                        firstNameLabel.setText("First name:   " + contact.getFirstName());
                        lastNameLabel.setText("Last name:   " + contact.getLastName());
                        adressLabel.setText("Adress:   " + contact.getAdress());
                        phoneNumberLabel.setText("Phone number:   " + contact.getPhoneNumber());
                        if (contact.getType().compareTo("Acquaintance") == 0) {
                            extraInfoLabel.setText("Occupation:   " + contact.getExtraInfo());
                        } else if (contact.getType().compareTo("Colleague") == 0) {
                            extraInfoLabel.setText("Email:   " + contact.getExtraInfo());
                        } else if (contact.getType().compareTo("Friend") == 0) {
                            extraInfoLabel.setText("Birthdate:   " + contact.getExtraInfo());
                        } else {
                            extraInfoLabel.setVisible(false);
                        }
                    }
                });

        scrollPane = new JScrollPane(list);

        gui.add(labels, BorderLayout.CENTER);
        gui.add(scrollPane, BorderLayout.WEST);
        gui.add(buttons, BorderLayout.SOUTH);
        add(gui);
        menuBar.add(menu);
        setJMenuBar(menuBar);

Here is where I display the GUI: 

    public class JavaLab3_pb1Java {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws FileNotFoundException, IOException {
        Agenda agenda = new Agenda();

        AgendaView agendaView = new AgendaView();
        agendaView.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        agendaView.setSize(500, 300);
        agendaView.pack();
        agendaView.setVisible(true);

    }
}
like image 779
Jones Avatar asked Mar 17 '13 16:03

Jones


People also ask

What is JList in Java?

JList is part of Java Swing package . JList is a component that displays a set of Objects and allows the user to select one or more items . JList inherits JComponent class.

Is JList scrollable?

JList doesn't support scrolling directly. To create a scrolling list you make the JList the viewport view of a JScrollPane.


1 Answers

You need to call pack() on your JFrame after adding all components and before calling setVisible(true) on it. This will tell the GUI's layout managers to manage their layouts, and will resize the GUI to the preferred size as specified by the components and the layouts.

Edit
Never call setSize(...) on anything. Better to override getPreferredSize(). For example, my sscce:

import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.*;

public class AgendaView extends JFrame {

   private static final int PREF_W = 500;
   private static final int PREF_H = 300;
   private JLabel firstNameLabel, lastNameLabel, adressLabel, phoneNumberLabel,
         extraInfoLabel;
   private JButton editButton, addButton, deleteButton, showButton;
   private JPanel labels, gui, buttons;
   private DefaultListModel<String> model;
   private JList<String> list;
   private JScrollPane scrollPane;

   public AgendaView() {

      super("***Agenda View***");

      gui = new JPanel(new BorderLayout(2, 2));
      gui.setBorder(new TitledBorder("Owner"));

      labels = new JPanel(new GridLayout(0, 1, 1, 1));
      labels.setBorder(new TitledBorder("Contact "));

      buttons = new JPanel(new GridLayout(1, 0, 1, 1));

      editButton = new JButton("Edit");
      addButton = new JButton("Add");
      deleteButton = new JButton("Delete");
      showButton = new JButton("Show");

      editButton.setEnabled(false);
      addButton.setEnabled(false);
      deleteButton.setEnabled(false);
      showButton.setEnabled(false);

      buttons.add(showButton);
      buttons.add(editButton);
      buttons.add(addButton);
      buttons.add(deleteButton);

      firstNameLabel = new JLabel("First name:                                         ");
      lastNameLabel = new JLabel("Last name: ");
      adressLabel = new JLabel("Adress: ");
      phoneNumberLabel = new JLabel("Phone number: ");
      extraInfoLabel = new JLabel("Extra info: ");

      labels.add(firstNameLabel);
      labels.add(lastNameLabel);
      labels.add(adressLabel);
      labels.add(phoneNumberLabel);
      labels.add(extraInfoLabel);

      model = new DefaultListModel<String>();
      list = new JList<String>(model);
      String[] eles = { "Ciprian Aftode", "Andrei Batinas", "Bogdan Fichitiu",
            "Valentin Pascau" };
      for (String ele : eles) {
         model.addElement(ele);
      }
      list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
      // list.setVisibleRowCount(-1);
      list.addListSelectionListener(new ListSelectionListener() {
         @Override
         public void valueChanged(ListSelectionEvent lse) {
            firstNameLabel.setText("First name:   first name");
            lastNameLabel.setText("Last name:   last name");
            adressLabel.setText("Address:   Address");
            phoneNumberLabel.setText("Phone number: PhoneNumber");
            extraInfoLabel.setText("Occupation: ExtraInfo");
         }
      });

      int ebGap = 8;
      list.setBorder(BorderFactory.createEmptyBorder(ebGap, ebGap, ebGap, ebGap));

      scrollPane = new JScrollPane(list);

      gui.add(labels, BorderLayout.CENTER);
      gui.add(scrollPane, BorderLayout.WEST);
      gui.add(buttons, BorderLayout.SOUTH);
      add(gui);
   }

   @Override
   public Dimension getPreferredSize() {
      return new Dimension(PREF_W, PREF_H);
   }


   private static void createAndShowGui() {
      AgendaView frame = new AgendaView();

      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.pack();
      frame.setLocationByPlatform(true);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }

}
like image 139
Hovercraft Full Of Eels Avatar answered Oct 09 '22 16:10

Hovercraft Full Of Eels