将两个 JMenu 的下一个放在一起 JAVA

putting two JMenu's next eachother JAVA

我在一个框架上添加了两个 JMenus :

JFrame frame = new JFrame();
//Menu :
menuBar = new JMenuBar();
menu = new JMenu("Fichier");
menu2 = new JMenu("Options");
JSeparator sep = new JSeparator(SwingConstants.VERTICAL);
JButton btn = new JButton();
btn.addActionListener(MyListener);
menuBar.add(menu);
menuBar.add(sep);
menuBar.add(menu2);
frame.setJMenuBar(menuBar);

这就是我想要的结果:

这是我得到的结果:

请告诉我这个框架是如何制作的:

我尝试使用 JWindow 并添加 JTextArea,但它占用了整个 window 的大小,我什至不能在上面写字。

JWindow的代码:

public class Fenetre extends JWindow
{
    int X;
    int Y;
    JTextArea ta;

    Fenetre()
    {
        setBounds(50, 50, 300, 300);
        ta = new JTextArea();
        JScrollPane scrollPane = new JScrollPane(ta);
        add(ta);
        
        addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent e) 
            {
                X = e.getX();
                Y = e.getY();
            }
        });
        
        addMouseMotionListener(new MouseMotionAdapter() {
            public void mouseDragged(MouseEvent e) 
            {
                Point p = getLocation();
                setLocation(p.x + (e.getX() - X), p.y + (e.getY() - Y));
            }
        });
        
        this.setVisible(true);
    }
}

由于第一部分已经在MadProgrammer的评论中得到了解答,所以我将重点介绍第二部分。据我了解,您想在框架中放置一个文本区域,占据整个 space.

第 1 步:创建内容窗格:

    JPanel contentPane = new JPanel(new BorderLayout());
    JTextArea console = new JTextArea(5, 30);
    scrollPane = new JScrollPane(console);
    contentPane.add(scrollPane, BorderLayout.CENTER);

第 2 步:将其添加到框架中

    frame.setContentPane(contentPane);

因为没有其他组件添加到框架中,框架布局管理器将允许此 contentPane“伸展”并占据整个 space。

框架首次呈现时,您将看不到滚动条。当您在文本区域中输入文本时,您最终会看到滚动条,因为组件已填充了信息。或者,您可以使文本区域的大小(当前设置为 5 x 30)大于框架的大小,您将看到滚动条。例如,如果您手动调整框架大小使其小于 5 行(高)和 30 列(宽),您将看到滚动条呈现。我为什么这么说?这样您就可以决定文本区域的正确大小。

不要使用JWindow它有焦点问题(实际上我认为这是设计使然,但我不熟悉细节)

相反,只需使用未装饰的 window(假设您想要的是没有 window 装饰)

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {                
                JTextArea ta = new JTextArea(20, 40);

                JFrame frame = new JFrame();
                frame.setUndecorated(true);
                frame.add(new JScrollPane(ta));
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }
}

现在,如果您“需要”边缘周围有一些填充,请使用允许您指定填充的布局管理器或使用 EmptyBorder

import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.EmptyBorder;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                JTextArea ta = new JTextArea(20, 40);

                JFrame frame = new JFrame();
                JPanel content = new JPanel(new BorderLayout());
                content.setBorder(new EmptyBorder(16, 16, 16, 16));
                frame.setContentPane(content);
                frame.setUndecorated(true);
                frame.add(new JScrollPane(ta));
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }
}

我想你会发现:

更好的起点。

此外,以后请提出 1 个具体问题,否则您可能会因为“需要更多关注”而关闭问题