如何将 JMenuBar 添加到 JTextArea?

How do I add JMenuBar to JTextArea?

我有一个JTextArea,我想给它加一个JMenuBar,但是好像不行。

ta = new JTextArea();
ta.setBackground(Color.RED);
// ta.setLayout(null); I tried with a null layout and 
                       non-null


pane = new JScrollPane(ta);
pane.setBounds(Main.WIDTH - (Main.WIDTH - 20), Main.HEIGHT - (Main.HEIGHT - 20), Main.WIDTH - 60, Main.HEIGHT - 500);

bar = new JMenuBar();
bar.setBounds(0, 0, ta.getWidth(), 20); // This won't be there if 
                                        // there is a non-null layout.
ta.add(bar); // I also tried pane.add(bar); that didn't work either.

有什么办法可以把JMenuBar加到JTextArea上吗?

  1. 将 JTextArea 放入 JScrollPane -- 总是
  2. 将 JScrollPane 添加到使用 BorderLayout
  3. 的 JPanel 的 BorderLayout.CENTER 位置
  4. 将 JMenuBar 添加到使用 JPanel 的同一 BorderLayout 的 BorderLayout.PAGE_START 位置

完成

例如,

JTextArea ta = new JTextArea(40, 20); // give columns and rows
JScrollPane scrollPane = new JScrollPane(ta);

JPanel borderLayoutPanel = new JPanel(new BorderLayout());
borderLayoutPanel.add(scrollPane, BorderLayout.CENTER);

JMenuBar menuBar = new JMenuBar();
// add menu's to the menu bar here

borderLayoutPanel.add(menuBar, BorderLayout.PAGE_START);

旁注:

  • 您调用的代码 ta.getWidth() 可能会返回宽度值 0,因为它似乎是在 呈现 JTextArea 之前被调用的。
  • 您几乎从不 想要将组件直接添加到 JTextArea 本身,因为这可能会干扰文本区域的功能。