1

我想在 JTextArea 上显示 JList,但它在 JTextArea 后面显示它。我附上了两张图片来通过图片来描述我的问题。在运行时我们如何在 JTextArea 上设置 JList?

JTextArea 后面的 JList:

在此处输入图像描述

JTextArea 上的 JList:

在此处输入图像描述

4

2 回答 2

4

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 中编写代码的能力。

于 2011-04-09T19:50:03.590 回答
2

我认为默认行为是在其他组件上显示组合内容,因此您可以采用这种方式。目前我想到的唯一建议是使用分层窗格。

您可以检查将带有选项的组合框部分添加到哪一层。然后将列表添加到上面的列表中。

关于 LayeredPane 的教程http://download.oracle.com/javase/tutorial/uiswing/components/layeredpane.html

根据对 RootPane 的描述,我认为组合框的选项必须显示在弹出层http://download.oracle.com/javase/tutorial/uiswing/components/rootpane.html

祝你好运,博罗。

于 2011-04-09T19:38:21.877 回答