Хотите отобразить JList поверх JTextArea - PullRequest
1 голос
/ 09 апреля 2011

Я хочу отобразить JList над JTextArea, но он показывает его за JTextArea. Я приложил два изображения, чтобы описать мою проблему с помощью изображений. Как во время выполнения мы можем установить JList поверх JTextArea?

JList позади JTextArea:

enter image description here

JList over JTextArea:

enter image description here

Ответы [ 2 ]

4 голосов
/ 09 апреля 2011

bsm: вы не должны использовать JLists для этой ситуации, но JComboBoxes, у которых будут выпадающие списки, которые правильно отображаются над JTextArea. Например,

import java.awt.BorderLayout;
import javax.swing.*;

public class JComboAndJTextArea extends JPanel {

   private static final String[] ITEMS1 = {"one", "two", "three", "four", "five"};
   private static final String[] ITEMS2 = {"Monday", "Tuesday", 
      "Wednesday", "Thursday", "Friday"};

   public JComboAndJTextArea() {
      JPanel northPanel = new JPanel();
      northPanel.add(new JCheckBox("Reminder"));
      northPanel.add(new JComboBox(ITEMS1));
      northPanel.add(new JComboBox(ITEMS2));

      setLayout(new BorderLayout());
      add(northPanel, BorderLayout.NORTH);
      add(new JScrollPane(new JTextArea(8, 30)), BorderLayout.CENTER);

   }

   private static void createAndShowUI() {
      JFrame frame = new JFrame("JComboAndJTextArea");
      frame.getContentPane().add(new JComboAndJTextArea());
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      java.awt.EventQueue.invokeLater(new Runnable() {
         public void run() {
            createAndShowUI();
         }
      });
   }
}

Я также настоятельно рекомендую на время отложить генерацию кода NetBeans, поскольку я искренне верю, что для многих это мешает им научиться программировать на Swing.

2 голосов
/ 09 апреля 2011

Я думаю, что поведение по умолчанию - показывать комбинированный контент поверх других компонентов, таким образом, у вас это так. Единственное предложение, о котором я бы подумал на данный момент, - это использовать многоуровневую панель.

Вы можете проверить, к какому слою добавляется часть поля со списком параметров. Затем добавьте список к одному из приведенных выше.

Учебник о LayeredPane http://download.oracle.com/javase/tutorial/uiswing/components/layeredpane.html

Из этого описания RootPane я думаю, что параметры выпадающего списка должны быть показаны на всплывающем слое http://download.oracle.com/javase/tutorial/uiswing/components/rootpane.html

Удачи, Боро.

...