简体   繁体   English

JList java调整大小

[英]JList java resize

I have a problem with a JList. 我有一个JList的问题。 When I select an item, it resizes itself. 当我选择一个项目时,它会自行调整大小。 How can I set the JList to a fixed size? 如何将JList设置为固定大小?

Here is a screenshot before I selected anything 这是我选择任何东西之前的截图

之前截图

and this is 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);

    }
}

You need to call pack() on your JFrame after adding all components and before calling setVisible(true) on it. 在添加所有组件之后和调用setVisible(true)之前,需要在JFrame上调用pack() 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. 这将告诉GUI的布局管理器管理它们的布局,并将GUI的大小调整为组件和布局指定的首选大小。

Edit 编辑
Never call setSize(...) on anything. 永远不要在任何事情上调用setSize(...) Better to override getPreferredSize() . 最好覆盖getPreferredSize() For example, my sscce : 例如,我的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();
         }
      });
   }

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM