gpt4 book ai didi

java - 如何在 JFrame 中手动设置面板内按钮的位置

转载 作者:行者123 更新时间:2023-11-30 03:04:39 24 4
gpt4 key购买 nike

目前,我有这个:

Frame

这是我的代码:

import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.event.ActionEvent.*;
import java.awt.event.ActionListener.*;
import javax.swing.*;
import javax.swing.JFrame.*;

public class Test extends JFrame //implements ActionListener
{
//setting private JFrame variables
private JMenuBar menu;
private JMenuItem m1,m2;
private JFrame f;
private JPanel panel;
private JButton btnUnit,btnInfo,btnSearch,btnExit;

public Test()
{
try
{
//creating new Jframe variable f
f = new JFrame();

//creating new JMenubar
menu = new JMenuBar();

//creating new JMenuItem
m1 = new JMenuItem("File");
m2 = new JMenuItem("Exit");

menu.add(m1);
menu.add(m2);

panel = new JPanel(new GridLayout(9,1));
panel.add(menu);
this.add(panel);

btnUnit = new JButton("Unit");
//btnUnit.setLayout(new GridLayout(1,3,100,0));
btnInfo = new JButton("Information");
btnSearch = new JButton("Search");
btnExit = new JButton("Exit");

panel.add(btnUnit);
panel.add(btnInfo);
panel.add(btnSearch);
panel.add(btnExit);

this.setTitle("MyFrame");
this.setDefaultLookAndFeelDecorated(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(300,200);
this.setLocationRelativeTo(null);
this.setResizable(false);
this.setVisible(true);
}
catch(Exception e)
{
e.printStackTrace();
}
}

public static void main(String[] a)
{
Test test = new Test();
}
}

我是一个穷人,对java了解甚少。我想学习GUI,所以我在我的程序中进行试错。我现在的目标是拥有一个顶部有菜单、下面有 4 个按钮的 JFrame,但我不知道如何设置按钮的大小并在该面板上手动设置它们的位置。

我真的很想学习,请帮助我。任何意见、建议、评论都会被接受并受到高度赞赏。

这是我想要的输出: Frame Output

最佳答案

您可以通过多种方式实现这一目标,例如......

Layout

import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
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() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JMenuBar menu = new JMenuBar();

//creating new JMenuItem
JMenuItem m1 = new JMenuItem("File");
JMenuItem m2 = new JMenuItem("Exit");

menu.add(m1);
menu.add(m2);

JFrame frame = new JFrame("Testing");
frame.setJMenuBar(menu);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}

public class TestPane extends JPanel {

public TestPane() {
setLayout(new GridLayout(2, 2));
add(new FillerPane(new JButton("Unit")));
add(new FillerPane(new JButton("Information")));
add(new FillerPane(new JButton("Search")));
add(new FillerPane(new JButton("Exit")));
}

public class FillerPane extends JPanel {

public FillerPane(JButton button) {
setBorder(new EmptyBorder(10, 10, 10, 10));
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.ipady = 20;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.weightx = 1;
add(button, gbc);
}

}

}

}

或者...

Layout

import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.Insets;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
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() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JMenuBar menu = new JMenuBar();

//creating new JMenuItem
JMenuItem m1 = new JMenuItem("File");
JMenuItem m2 = new JMenuItem("Exit");

menu.add(m1);
menu.add(m2);

JFrame frame = new JFrame("Testing");
frame.setJMenuBar(menu);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}

public class TestPane extends JPanel {

public TestPane() {
setBorder(new EmptyBorder(10, 10, 10, 10));
setLayout(new GridLayout(2, 2, 10, 10));
add(makeButton("Unit"));
add(makeButton("Information"));
add(makeButton("Search"));
add(makeButton("Exit"));
}

protected JButton makeButton(String text) {
JButton btn = new JButton(text);
btn.setMargin(new Insets(10, 10, 10, 10));
return btn;
}

}

}

看看Laying Out Components Within a Container了解更多详情

I was wondering about the menu items, us m1.add(m2); and remove the menu.add(m2);

例如,使用JMenuItem...

JMenuBar mb = new JMenuBar();
JMenu m = new JMenu("File");
JMenuItem exit = new JMenuItem("Exit");
m.add(exit);
mb.add(m);

看看How to Use Menus了解更多详情

关于java - 如何在 JFrame 中手动设置面板内按钮的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35098449/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com