按钮和窗口之间的空间

2024-05-03

我这里有这段代码,其想法是在主窗口中在文本区域旁边有两个按钮,但我尚未添加。在尝试使用 GridBagLayout 并在此过程中扯掉我的头发后,我决定不使用布局并在不可调整大小的窗口内手动放置按钮。

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class Tema extends JFrame implements ActionListener {

JMenuBar menubar = new JMenuBar();
JMenu actiuni = new JMenu("Actiuni");
JMenu contact = new JMenu("Contact");
JMenu help = new JMenu("Help");
JMenuItem ntest = new JMenuItem("Nou test");
JMenuItem vizarh = new JMenuItem("Vizualizare arhiva");
JMenuItem datcon = new JMenuItem("Date de contact");
JMenuItem sendmail = new JMenuItem("Trimite e-mail");
JMenuItem instrut = new JMenuItem("Instructiuni de utilizare");
JButton b1 = new JButton("Incepe testul!");
JButton b2 = new JButton("Vezi arhiva!");
JTextArea ta = new JTextArea("Default text", 5, 30);

public void common(String s)
{
    setSize(800,450);
    setLocationRelativeTo(null);
    setResizable(false);

    setTitle(s);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


    menubar.add(actiuni);
    menubar.add(contact);
    menubar.add(help);
    actiuni.add(ntest);
    actiuni.add(vizarh);
    contact.add(datcon);
    contact.add(sendmail);
    help.add(instrut);

    setJMenuBar(menubar);

}

public Tema()
{
    common("Self-Esteem- Fereastra Principala");
    JPanel cp = new JPanel();
    cp.setLayout(null);


    b1.setBounds(100,100,200,100);
    cp.add(b1);


    b2.setBounds(100,250,200,100);
    cp.add(b2);

    setContentPane(cp);
    setVisible(true);

}

public static void main(String[] args)
{
    Tema x = new Tema();
}


@Override
public void actionPerformed (ActionEvent e){           

}

}

But the output is this: enter image description here

我的问题是为什么第二个按钮下方的空间不等于第一个按钮上方的空间?它们不应该都是 100 像素吗?


  • 不要延长JFrame不必要的类。
  • Never use Absolute/Null LayoutManager. Use an appropriate LayoutManager, this includes nesting Layouts to achieve desired look. see here for good tutorials:
    • 布局管理器的视觉指南 http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html
    • 使用布局管理器 http://docs.oracle.com/javase/tutorial/uiswing/layout/using.html
  • 不要打电话JFrame#setSize(..) on JFrame而只是打电话JFrame#pack()设置前JFrame可见的。
  • 不要使用JFrame#setContentPane(...)只需使用add(..) on JFrame实例
  • Create 事件调度线程 http://docs.oracle.com/javase/tutorial/uiswing/concurrency/dispatch.html初始化和更改 UI 组件
  • 不要实施单一ActionListener对于多个组件。除非它会被其他类或组件共享一个Action。而是使用一个匿名动作监听器 http://www.leepoint.net/notes-java/GUI/events/anonymous_listener.html

这是我制作的一个例子(基本上是你的代码fixed) 希望能帮助到你:

import java.awt.BorderLayout;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;

public class LayoutTest {

    private final JMenuBar menubar = new JMenuBar();
    private final JMenu actiuni = new JMenu("Actiuni");
    private final JMenu contact = new JMenu("Contact");
    private final JMenu help = new JMenu("Help");
    private final JMenuItem ntest = new JMenuItem("Nou test");
    private final JMenuItem vizarh = new JMenuItem("Vizualizare arhiva");
    private final JMenuItem datcon = new JMenuItem("Date de contact");
    private final JMenuItem sendmail = new JMenuItem("Trimite e-mail");
    private final JMenuItem instrut = new JMenuItem("Instructiuni de utilizare");
    private final JButton b1 = new JButton("Incepe testul!");
    private final JButton b2 = new JButton("Vezi arhiva!");
    private final JTextArea ta = new JTextArea("Default text", 5, 30);
    //create JFrame instance
    private final JFrame frame = new JFrame();

    public LayoutTest() {
        initComponents();
    }

    public static void main(String[] args) {
        //creat UI on EDT
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new LayoutTest();
            }
        });
    }

    private void initComponents() {
        frame.setTitle("Self-Esteem- Fereastra Principala");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        menubar.add(actiuni);
        menubar.add(contact);
        menubar.add(help);
        actiuni.add(ntest);
        actiuni.add(vizarh);
        contact.add(datcon);
        contact.add(sendmail);
        help.add(instrut);

        frame.setJMenuBar(menubar);
        JPanel textAreaJPanel = new JPanel();

        //create button panel with GridLayout(2,1) 
        JPanel buttonJPanel = new JPanel(new GridLayout(2, 1));//new GridLayout(2, 1,10,10) creates gridlayout with horixontal and vertcial spacing of 10

        //add buttons to one panel
        buttonJPanel.add(b1);
        buttonJPanel.add(b2);
        //add text area to textarea jPanel
        textAreaJPanel.add(ta);

        //add textarea panel to west of content pane (BorderLayout by default)
        frame.add(textAreaJPanel, BorderLayout.WEST);

        //add button Panel to EAST of JFrame content pane
        frame.add(buttonJPanel, BorderLayout.EAST);

        frame.pack();

        frame.setResizable(false);
        frame.setLocationRelativeTo(null);

        frame.setVisible(true);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按钮和窗口之间的空间 的相关文章

  • 使用 GWT CellTableBuilder 构建树表

    Is it possible to build a tree table like this http www sencha com examples ExamplePlace basictreegrid with the new Cell
  • 使用cameltestsupport进行Camel单元测试,模板始终为空

    我正在用 Camel 做一个简单的单元测试 我想做的就是从文件 在资源下 读取 JSON 内容 将其发送到 Java 类进行验证 这是我试图测试的路线 无论我做什么 模板 我用来发送正文 json 始终为空 这是我的代码 public cl
  • 如果在睡眠线程上调用interrupt()会发生什么?

    我有一个线程 然后run I call sleep 如果我中断这个线程会发生什么 MyThread extends Thread public void run try sleep 1000000 catch InterruptedExce
  • 如何使用 SimpleDateFormat 解析多种格式的日期

    我正在尝试解析文档中的一些日期 用户似乎以类似但不完全相同的格式输入了这些日期 以下是格式 9 09 9 2009 09 2009 9 1 2009 9 1 2009 尝试解析所有这些内容的最佳方法是什么 这些似乎是最常见的 但我想让我困扰
  • Grails 2.3.0 自动重新加载不起作用

    我最近将我们的项目升级到 grails 2 3 0 一切工作正常 除了每当我更改代码时自动重新加载都无法工作的问题 这包括所有项目工件 控制器 域 服务 gsps css 和 javascript 文件 我的旧版本 grails 可以正常工
  • 无法使用maven编译java项目

    我正在尝试在 java 16 0 1 上使用 maven 构建 IntelliJ 项目 但它无法编译我的项目 尽管 IntelliJ 能够成功完成 在此之前 我使用maven编译了一个java 15项目 但我决定将所有内容更新到16 0 1
  • Java:使用 HttpURLConnection 的 HTTP PUT

    如何执行 HTTP PUT 我正在使用的类似乎认为它正在执行 PUT 但端点将其视为我执行了 GET 我做错了什么吗 URL url new URL https HttpURLConnection conn HttpURLConnectio
  • 在 HTTP 标头中发送 UTF-8 值会导致 Mojibake

    我想使用 servlet 发送阿拉伯语数据HTTPServletResponse给客户 我正在尝试这个 response setCharacterEncoding UTF 8 response setHeader Info arabicWo
  • 具有共享依赖项的多模块项目的 Gradle 配置

    使用 gradle 制作第一个项目 所以我研究了 spring gradle hibernate 项目如何组织 gradle 文件 并开始制作自己的项目 但是 找不到错误 为什么我的配置不起作用 子项目无法解决依赖关系 所以项目树 Root
  • Java 数组的最大维数

    出于好奇 在 Java 中数组可以有多少维 爪哇language不限制维数 但是JavaVM规范将维度数限制为 255 例如 以下代码将无法编译 class Main public static void main String args
  • 获取给定类文件的目录路径

    我遇到的代码尝试从类本身的 class 文件所在的同一目录中读取一些配置文件 File configFiles new File this getClass getResource getPath listFiles new Filenam
  • 如何在 Eclipse Java 动态 Web 项目中使用 .properties 文件?

    我正在 Eclipse 中开发动态 Web 项目 我创建了一个 properties 文件来存储数据库详细信息 用户名 密码等 我通过右键单击项目和 New gt File 添加它 我使用了Java util包Properties类 但它不
  • 为什么java中的for-each循环中需要声明变量

    for 每个循环的通常形式是这样的 for Foo bar bars bar doThings 但如果我想保留 bar 直到循环结束 我可以not使用 foreach 循环 Foo bar null Syntax error on toke
  • Linux 上有关 getBounds() 和 setBounds() 的 bug_id=4806603 的解决方法?

    在 Linux 平台上 Frame getBounds 和 Frame setBounds 的工作方式不一致 这在 2003 年就已经有报道了 请参见此处 http bugs java com bugdatabase view bug do
  • 对象锁定私有类成员 - 最佳实践? (爪哇)

    I asked 类似的问题 https stackoverflow com questions 10548066 multiple object locks in java前几天 但对回复不满意 主要是因为我提供的代码存在一些人们关注的问题
  • 解决错误javax.mail.AuthenticationFailedException

    我不熟悉java中发送邮件的这个功能 我在发送电子邮件重置密码时遇到错误 希望你能给我一个解决方案 下面是我的代码 public synchronized static boolean sendMailAdvance String emai
  • 挂钩 Eclipse 构建过程吗?

    我希望在 Eclipse 中按下构建按钮时能够运行一个简单的 Java 程序 目前 当我单击 构建 时 它会运行一些 JRebel 日志记录代码 我有一个程序可以解析 JRebel 日志文件并将统计信息存储在数据库中 是否可以编写一个插件或
  • Java的-XX:+UseMembar参数是什么

    我在各种地方 论坛等 看到这个参数 并且常见的答案是它有助于高并发服务器 尽管如此 我还是找不到 sun 的官方文档来解释它的作用 另外 它是Java 6中添加的还是Java 5中存在的 顺便说一句 许多热点虚拟机参数的好地方是这一页 ht
  • Java:多线程内的 XA 事务传播

    我如何使用事务管理器 例如Bitronix http docs codehaus org display BTM Home JBoss TS http www jboss org jbosstm or Atomikos http www a
  • Android AutoCompleteTextView 带芯片

    我不确定我是否使用了正确的词语来描述此 UI 功能 但我已附上我希望在我的应用程序中实现的目标的快照 它由 Go SMS 使用 用户在编辑文本中键入联系人 在用户从完成下拉列表中选择联系人后 该联系人将被插入到编辑文本中 如附图所示 编辑文

随机推荐

  • 如何触发并忘记子进程?

    我有一个长时间运行的进程 我需要它来启动另一个进程 该进程也会运行很长一段时间 我只需要开始它 然后就完全忘记它 我设法通过从 Ruby 编程 一书中获取一些代码来完成我需要的操作 但我想找到最好 正确的方法 并了解发生了什么 这是我最初得
  • 用户反馈系统的正确数据库模型(一个有趣的案例)

    我正在使用 PHP 和 Yii Framework 开发一个应用程序 我一直在考虑最适合给定功能的数据库结构 这就是我的想法 但我并不是 100 肯定应该这样做 因此我决定询问社区 应用程序说明 注册用户可以参加活动 每个事件都可以有一个
  • XML 在多行上分割属性值

    我有包含长属性值的 XML 数据 该值不包含空格字符 我想通过分割 XML 文本来格式化 XML 以提高可读性 以便行不超过最大列数 有什么办法可以实现这一点吗 是否可以在行的每一端放置任何换行符 以便 XML 解析器不会将其视为空格 如
  • 为什么当文件存在时 `boost::filesystem::exists` 返回 false?

    const boost filesystem path fileName tmp hello log if boost filesystem exists fileName do sth else std cout lt lt file d
  • Python ? (条件/三元)赋值运算符[重复]

    这个问题在这里已经有答案了 C 和许多其他语言都有一个有条件 又名三元 http www eskimo com 7Escs cclass int sx4eb html操作员 这允许您根据条件的真实性在两个值之间做出非常简洁的选择 这使得表达
  • 将 CSV 文件导入 MySQL 数据库时出现无效的 UTF-8 字符串

    我正在尝试使用以下代码将 CSV 导入我的 MySQL 数据库 我从帖子中获取了 CSV 文件
  • android 6.0运行时需要哪些权限

    我有一个 Android 代码 可以在 Android 5 0 版本上正常运行 我的AndroidManifest xml is
  • C# 中的字符串数组

    我在字符串数组中插入字符串元素时遇到问题 例如 我有三个赋值行 a b b c c e 然后我想将这六个变量插入string 变量 我使用以下代码 但此代码仅插入最后一个赋值变量 c e for int i 0 i lt S i S 3 n
  • 如何删除除日期列之外所有行均为 NaN 的位置?

    我正在尝试从 csv 文件中删除 NaN 值 但我只想删除所有列均为空的行 下面附有我要删除的行的图片 文件链接 https filebin net ou93iqiinss02l0g https filebin net ou93iqiins
  • 有没有办法检查 unicode 文本是否采用某种语言?

    我将从用户那里收到需要验证是否为中文字符的文本 有什么办法可以检查这个吗 您可以使用正则表达式来匹配支持的命名块 https learn microsoft com en us dotnet standard base types char
  • 与右值交换

    假设我想要swap它适用于右值 并且不想为右值 左值引用的所有组合编写 4 个版本 右值 右值版本有点毫无意义 但也无害 我想出了这个 template
  • 尝试将 XLSX 数据导入 R 时出现 IllegalArgumentException

    在将 xlsx 文件导入 R 时 我遇到了以下错误 mydata lt read xlsx C Users aniruddha Downloads failingExample xlsx 1 Error in jcall row ir Lo
  • 每个对象都是一个函数,每个函数都是对象 - 哪个是正确的?

    我正在阅读这个链接JavaScript 语法 http en wikipedia org wiki JavaScript syntax 这似乎是循环的 每个函数都是一个对象 每个对象本身也是一个函数 哪个是原子的 有人可以用更好的方式解释吗
  • 输入值返回 NaN

    如果有人可以帮助我 因为我不知道为什么控制台中总是有 NaN 一切似乎都很好 该代码应该获取输入值并进行简单的计算 不幸的是 我收到了 NaN 所以我决定使用 console log 来探索值 它向我解释了每个输入的值都是 NaN 我认为这
  • 带有 TextWrapping 的 WPF CheckBox 样式

    我需要申请一个TextWrapping在 WPF 中CheckBox 请看这两个示例
  • 如何从路径和文件名中删除非法字符?

    我需要一种强大且简单的方法来从简单字符串中删除非法路径和文件字符 我使用了下面的代码 但它似乎没有做任何事情 我错过了什么 using System using System IO namespace ConsoleApplication1
  • 使用 dbutils 在 Databricks 中上传后从目录中删除文件

    StackOverflow 的一位非常聪明的人帮助我将文件从 Databricks 复制到目录中 复制文件 https stackoverflow com questions 54007074 how to truncate and or
  • 从私人 nuget feed 下载所有包

    我想从我的私人 nuget feed 下载所有版本的所有软件包 就是这样 我在使用 powershell bash 包管理器等方面没有任何问题 我无法使用占位符项目 引用所有包并复制我的缓存 因为我需要所有版本 任何想法 我正在与一家私人
  • XPath:默认为“节点 A”,如果“节点 B”不为空,则选择“节点 B”

    我需要创建一个执行以下操作的 XPath 表达式 默认返回 NodeA 内的元素 如果 NodeB 不为空 则返回 NodeB 内部的元素 下面是一些示例 XML 以便可以清楚地看到我的目标结构 我使用的是 MS InfoPath
  • 按钮和窗口之间的空间

    我这里有这段代码 其想法是在主窗口中在文本区域旁边有两个按钮 但我尚未添加 在尝试使用 GridBagLayout 并在此过程中扯掉我的头发后 我决定不使用布局并在不可调整大小的窗口内手动放置按钮 import java awt impor