将两个 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);
}
});
}
}
我想你会发现:
- Creating a GUI With Swing
- How to Make Frames (Main Windows)
- Laying Out Components Within a Container
更好的起点。
此外,以后请提出 1 个具体问题,否则您可能会因为“需要更多关注”而关闭问题
我在一个框架上添加了两个 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);
}
});
}
}
我想你会发现:
- Creating a GUI With Swing
- How to Make Frames (Main Windows)
- Laying Out Components Within a Container
更好的起点。
此外,以后请提出 1 个具体问题,否则您可能会因为“需要更多关注”而关闭问题