首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我想用Java Swing中的JButtons做一个六角形的表格

在Java Swing中,可以使用JButtons来创建六角形的表格。下面是一个实现此功能的示例代码:

代码语言:txt
复制
import javax.swing.*;
import java.awt.*;

public class HexagonalGrid extends JFrame {
    private static final int SIZE = 5; // 表格大小
    private static final int BUTTON_SIZE = 60; // 按钮大小

    public HexagonalGrid() {
        setTitle("Hexagonal Grid");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(false);
        
        // 设置GridLayout为六角形布局
        setLayout(new GridLayout(SIZE, SIZE));

        // 创建按钮并设置为六边形
        for (int row = 0; row < SIZE; row++) {
            for (int col = 0; col < SIZE; col++) {
                if ((row + col) % 2 == 0) { // 通过奇偶性确定按钮显示颜色
                    JButton button = new JButton();
                    button.setPreferredSize(new Dimension(BUTTON_SIZE, BUTTON_SIZE));
                    button.setBackground(Color.YELLOW);
                    add(button);
                } else {
                    add(new JLabel()); // 空白标签用于填充空位
                }
            }
        }

        pack();
        setLocationRelativeTo(null);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            new HexagonalGrid().setVisible(true);
        });
    }
}

这个示例使用了Java的Swing库来创建一个六角形的表格。主要思路是通过GridLayout布局管理器和JButton组件来实现。具体步骤如下:

  1. 创建一个继承自JFrame的类,命名为HexagonalGrid。
  2. 在HexagonalGrid类的构造函数中,设置窗口的标题、关闭操作和不可调整大小。
  3. 将布局管理器设置为GridLayout,并将表格大小设为SIZE * SIZE,其中SIZE为常量,表示表格的行数和列数。
  4. 在嵌套的循环中,创建按钮和空白标签。奇数行和偶数行的按钮背景颜色不同,以形成六角形的效果。
  5. 设置按钮的首选大小为BUTTON_SIZE * BUTTON_SIZE,其中BUTTON_SIZE为常量,表示按钮的宽度和高度。
  6. 将按钮添加到六角形表格中,空白标签用于填充空位。
  7. 调用pack()方法和setLocationRelativeTo(null)方法,以适应组件的大小并将窗口居中显示。
  8. 在main()方法中,通过SwingUtilities.invokeLater()方法创建并显示HexagonalGrid窗口。

这样,就可以在Java Swing中使用JButtons创建一个六角形的表格了。

请注意,本答案只是提供了使用Java Swing实现六角形表格的示例代码,并未涉及云计算、IT互联网领域的相关知识。如需了解更多关于云计算、IT互联网领域的名词和概念,以及腾讯云相关产品和介绍链接,请提供具体的问题或需求。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JAVA学习Swing概述JFrame学习

package com.swing; import java.awt.Color; import java.awt.Container; import java.awt.event.WindowAdapter...; /**  *1:Swing组件通常被称作"轻量级组件";  *  *2:窗体作为Swing应用程序组件承载体,处于非常重要位置,Swing中常用窗体包括  *JFrame,JDialog... *  *3:JFrame窗体是一个容器,它是Swing程序各个组件载体,可以将JFrame看作是承载这些  *Swing组件容器  *  *4:读者大致应该有这样一个概念  *Swing组件窗体通常和组件容器相关...JFrameTest();         jf.CreateJFrame("创建一个JFrame窗体");     } } //实例演示JLabel标签使用,实例化JLabel对象,然后将标签实例添加到容器...,然后可以设置容器布局, package com.swing; import java.awt.Color; import java.awt.Container; import javax.swing.JFrame

1.6K90
  • JAVA学习Swing部分JDialog对话框窗体简单学习

    package com.swing; import java.awt.Color; import java.awt.Container; import java.awt.event.ActionEvent...; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JDialog; import...窗体时Swing组件对话框,  * JDialog功能就是是从一个窗体中弹出另一个窗体,就像是在使用浏览器时弹出的确定对话框一样  *  * 2:JDialog窗体和JFrame窗体类似,在使用时也需要调用...getContentPane()方法将  * 窗体转化为容器,然后在容器设置窗体特性  *  * 3:JDialog有五种构造方法,可以用来指定标题,窗体,和模式对话框  * @author biexiansheng...        jl.setHorizontalAlignment(JLabel.CENTER);//将标签文字置于标签中间位置         container.add(jl);//将标签添加到容器

    1.8K70

    java swing项目桌面软件还是蛮香,至少有了自己桌面软件|Java 开发实战

    最近利用空闲时间自己琢磨了一下java swing 编程,其实在从事javaweb之前一直向往就是java swing 开发,不知道为什么可能当时觉得Windows上exe程序很是神奇,关于windows...上制作exe之前也有介绍java swing开发都是自己琢磨,有的地方写不规范,不过大多都是网上借鉴,应该不算离谱。...今天看了看自己java swing程序,感觉写还不错,但是发现现在遇到一个瓶颈问题,就是jtable使用,由于一开始概念不理解现在jtable得重新写,之前吧数据放在jtable上了,但是真正开发...java swing数据都是放在TableModel上。...2、先将JTable加入jscrollpane(滚动条),然后在将滚动条加入到对应控件(Jpanel或者是Jframe).java swing 开发中加入滚动条是很常见操作,所以这种方式加入表格还是很推荐

    34210

    就是一群人特征;jscall是啥?就是想用你家电饭锅

    上午在讲nodestream时候,提到Stream是一个抽象接口。这个抽象该怎么描述呢?是按自己理解来说,虽然并不严谨与标准,但大方向应该是不会错。...是这样说, //////// 人,都有双手双脚。 这是一个总体普遍描述,说是一个类别,一个种类,一个群体情况。这就是抽象描述。 中国人,都是黄皮肤。 这是一个总体全部描述。...是先从一个现实生活例子开始讲起,“想借你家电饭锅”。 业务需求是这样:“张xx,你有一个电饭锅。把它借我用一下,要做饭。”...总是跟我学生们讲,“你们应该慢慢培养一种程序思维。就是用程序逻辑与思维来看待现实生活事情。这种思维方式,也是无法被培训只能告诉你们有这个东西,至于如何得到,只能靠你们自己。”...替换了作用域, 我家厨房里,没有电饭锅。 替换之后,张xx厨房 变成了 尚xx厨房, 这个厨房,就是“作用域”。 2、然后调用原来 张xx方法,使用他电饭锅。 就是调用了他方法。

    530100

    愿称 Java8 Stream API 为 Java 之神!

    更多关于 Lambda 函数式编程请移步至 #公众号:一个正经程序员 文章:一篇文章教会你使用 Java8 Lambda 表达式 01 简介 Stream API 是 Java 8 中加入一套新...文章:你竟然不知道 Java8 可以用双冒号(::)吗?...可以把流跟集合做一个比较。在 Java ,集合是一种数据结构,或者说是一种容器,用于存放数据,流不是容器,它不关心数据存放,只关注如何处理。...可以把流当做是 Java Iterator,不过它比 Iterator 强大多了。...如:生成1-20范围数字可以拆分成1-10, 11-20。 往期推荐 发现便捷,畅游互联网世界——【书签导航】带你领略全新体验! 历时3分钟,部署并上线了 ChatGPT-LX 网站! 震惊!

    32320

    关于java反射,只能努力到这了

    我们还可以使用反射来实例化一个对象,调用它方法,更改字段值。这种「动态获取信息以及动态调⽤对象⽅法功能」称为java语⾔反射机制。...反射用途 可能有些人认为反射在工作中用并不多,但其实并不是这样,工作处处都能见到反射影子,比如工作中经常会通过对象 「.」...不同是,getField()获取必须是声明了public字段,包括父类或者实现接口中public字段; getDeclaredField() 只能获取本类定义字段。...可以使用getMethod()来获取类公共方法,我们需要传递该方法方法名和参数类型。如果在类找不到该方法,反射 API 会在超类查找该方法。...,在Class对象方法只要是带有「Declared」字段都是获取本类声明方法、字段或者构造方法等,反之则是调用public方法;在调用私有方法时要注意一点要将访问检查关闭 参考资料: https

    57520

    人生第一场Java面试

    1、说起第一次Java面试,不禁回想起大学时参加校园招聘那段日子,那时候还是本科生,由于不是科班出身,只学过一点点Java皮毛,所以那时候对于找Java工作并没有什么概念,只是以为上过Java...当时投递了几个省内还不错公司,结果都是音讯全无,当时还挺费解不是学过Java吗,为什么连面试机会都不给我呢。当然那时候也没时间纳闷了,复习考研才是第一要务。...5、一开始给我电话软国际,当时还不知道这就是家外包公司,但是一看招聘要求,居然要先交钱才能上班,后来才知道这是打着招聘旗号做培训机构,真的非常恶心。。。...后来,终于又有一家小公司来联系,让去现场面试,公司就在本地,打了个车过去,开始人生第一次真正意义上面试。...到了那个地方之后,才发现就是一间小小办公室,有个自称面试官的人看了简历,然后给了我一套Java测试卷让做,半个小时后,把一份完成度百分之50左右卷子交上去了,本以为挂定了,没想到这个面试官居然对褒奖有佳

    36230

    1小时学会通过Java Swing Design设计java图形化

    环境与工具: 系统环境:win10 开发工具:Eclipse IDE for Java Developers - 2020-09 数据库:MySQL5.6 学习目标: 一般大一结束时候需要做一个类似一下内容...javaswing项目,故而咱们学习目标如下: 其中设计到控件:文本框、输入框、按钮、表格,数据库是JDBC绑定数据集类型就行。...---- 1、项目创建 使用eclipse直接创建一个java空项目即可,唯一要注意就是创建【java时候不是点击【class】而是创建【JFrame】,通过【JFrame】才能使用设计工具【Design...这里点【other】因为【JFrame】在这个选项栏。...画有些乱,但是基本上一眼就能看出来是啥:  表格JTable: JPanel设置上下布局,JScrollPane设置,这样才能显示table标题列 添加一些测试数据: 效果: 5、JDBC

    1.1K10

    生物系学妹也能听懂Java NIOWrite事件

    比如服务端需要发送一个200MBuffer,看看是否使用OP_WRITE事件区别。 不使用事件 程序运行到这会等到200M文件发送完成后才继续往下执行,不符合异步事件模型思想。...// 200MBuffer ByteBuffer buffer = .......while(buffer.hasRemaining()) { // 该方法只会写入小于socket's output buffer空闲区域任何字节数 // 并返回写入字节数,可能是0...,跟注册读事件一样,当底层写缓冲区有空闲就会触发写事件了,而一般来说底层写缓冲区大部分都是空闲。...连接有两种结果,一种是成功连接,第二种是异常,但是connect方法已经返回,无法通过该方法返回值或者是异常来通知用户程序建立连接情况,所以由OP_CONNECT事件和finishConnect方法来通知用户程序

    29420

    生物系学妹也能听懂Java NIOWrite事件

    比如服务端需要发送一个200MBuffer,看看是否使用OP_WRITE事件区别。 不使用事件 程序运行到这会等到200M文件发送完成后才继续往下执行,不符合异步事件模型思想。...// 200MBuffer ByteBuffer buffer = .......while(buffer.hasRemaining()) { // 该方法只会写入小于socket's output buffer空闲区域任何字节数 // 并返回写入字节数,可能是0...,跟注册读事件一样,当底层写缓冲区有空闲就会触发写事件了,而一般来说底层写缓冲区大部分都是空闲。...连接有两种结果,一种是成功连接,第二种是异常,但是connect方法已经返回,无法通过该方法返回值或者是异常来通知用户程序建立连接情况,所以由OP_CONNECT事件和finishConnect方法来通知用户程序

    27710

    java swing 添加 jcheckbox复选框

    总体上而言,Java Swing编程有两大特点:麻烦、效果差。        ...麻烦是说由于设计器使用不方便(如果您希望使用窗体设计器通过快速拖拽控件建立您Java Swing GUI程序,请您使用MyEclipse 8.5以上版本,并且需要最高使用权限),所有代码都得手写,如果没有好编码规范和注释习惯...通过一段代码来创建属于我们窗体: 1 import javax.swing.JFrame; 2 2 3 3 /** 4 4 * 第一个Java窗体 5 5 * 6...小贴士:使用setLayout设置布局,参数传递null; 讨论一下怎样在窗体表格显示复选框。即实现如下效果: ? 小贴士二:使用add方法向控件添加内容控件。...new ……()是构造方法,调用来构造一个匿名对象,其后{}不是Java特殊语法,但是Java可以将方法定义在里面(这里方法生命周期与匿名对象相 同),当然,此处是用于实现接口方法。

    3.3K00

    图书管理系统代码 4SearchFrame (…

    import java.awt.BorderLayout; import java.awt.Color; import java.awt.FlowLayout; import java.awt.GridLayout...int m = Integer.parseInt(textField.getText()); book_search =(Book)obo.readObject();//先读取第一个对象 // 如果文本框输入文字出现在某个对象执行以下操作...TableModel model = new DefaultTableModel(book,book_info); // 根据表格模型类创建二维表格 table_search = new JTable...Radio_author.isSelected()){ int m=0; do{ if(m<=n){ book_search =(Book)obo.readObject();//先读取第一个对象 // 如果文本框输入文字出现在某个对象执行以下操作.../设置面板布局 centerPanel.setLayout(new BorderLayout()); southPanel.setLayout(new FlowLayout()); // 获取父类传入二维表格并添加入窗体

    1.2K20

    JTable常见用法细则+设置某列可编辑+滚动表格

    JTable常见用法细则 JTable是Swing编程很常用控件,这里总结了一些常用方法以备查阅.欢迎补充,转载请注明作者与出处. 一....创建表格控件各种方式: 1)  调用无参构造函数. JTable table = new JTable(); 2)  以表头和表数据创建表格....注:数据是Member类型链表,Member类如下: [图片] 填充数据代码: [图片] 2) 取得表格数据 [图片] 五.取得用户所选行 1) 取得用户所选单行 [图片]...2) 取得用户所选多行 [图片] 六.添加表格事件处理 [图片] 例子: import java.awt.BorderLayout; import java.awt.Dimension;...import java.awt.FlowLayout; import java.awt.GridLayout; import javax.swing.Icon; import javax.swing.ImageIcon

    3.1K00

    面试官问我“Java锁有哪些?以及区别”,跪了

    互斥锁在Java具体实现就是ReentrantLock 读写锁在Java具体实现就是ReadWriteLock 乐观锁/悲观锁 乐观锁与悲观锁不是指具体什么类型锁,而是指看待并发同步角度...从上面的描述我们可以看出,悲观锁适合写操作非常多场景,乐观锁适合读操作非常多场景,不加锁会带来大量性能提升。 悲观锁在Java使用,就是利用各种锁。...乐观锁在Java使用,是无锁编程,常常采用是CAS算法,典型例子就是原子类,通过CAS自旋实现原子操作更新。...当需要put元素时候,并不是对整个hashmap进行加锁,而是先通过hashcode来知道他要放在那一个分段,然后对这个分段进行加锁,所以当多线程put时候,只要不是放在一个分段,就实现了真正并行插入...自旋锁 在Java,自旋锁是指尝试获取锁线程不会立即阻塞,而是采用循环方式去尝试获取锁,这样好处是减少线程上下文切换消耗,缺点是循环会消耗CPU。

    44530

    基于Java swing+mysql+eclipse【图书管理系统】

    大家好,又见面了,是你们朋友全栈君。 本项目为Java swing项目,在工作环境基本使用不到,但是很多学校把这个当做编程入门项目来做,故分享出本项目供初学者参考。...(127,157,185), 1, false)); //构造函数调用填充表格数据函数,全部图书类别显示在表格 fillTable(new BookType()); } /** * 图书类别删除事件处理...(); //获取表中选中行第一列值并显示在idText框 idText.setText(String.valueOf(bookTypeTable.getValueAt(row, 0)));...bookType.setBookTypeName(s_bookTypeName); //根据图书类别查询图书类别 fillTable(bookType); } /** * 在表格填充数据...")); //向vector添加bookTypeDesc //将vector数据显示到表格 dtm.addRow(v); } } catch (SQLException

    3.1K20

    Java Swing花样玩法:教你用代码制作六一儿童节精美贺卡(简单版)

    想通过这个贺卡,表达对孩子们爱和祝福,也希望能激发他们对编程兴趣。在这篇博客将和大家分享是如何设计和实现这个贺卡,以及在这个过程遇到一些挑战和收获❤️ ✨引言 儿童节快乐!...作为一位热爱编程和创造开发者,决定写下这篇博客,与大家分享一个简单而有趣项目,让我们一起用Java Swing创造一个鲜花贺卡,把他送给你喜欢的人 ✨简单介绍一下Javaswing这项技术简单介绍一下...Swing最初是作为一个可选扩展包提供,后来在1998年被集成到了Java 2平台,并成为了Java标准图形用户界面技术。...布局是指Swing组件在容器排列方式,如水平对齐、垂直对齐等,它们都实现了java.awt.LayoutManager接口,并提供了一些常用布局管理器,如流式布局、网格布局等。...通过这篇博客,我们一起探索了使用Java Swing,我们看到了编程魔力,希望你喜欢这个小项目,它是为了给孩子们带来一些快乐而制作,永远少年

    17510

    如何在Ubuntu 18.04上安装和使用PostgreSQL

    创建和删除表 现在您已了解如何连接到PostgreSQL数据库系统,您可以了解一些基本Postgres管理任务。 首先,创建一个表来存储一些数据。例如,描述一些游乐场设备表格。...例如,不要将列名包装在引号,但是您输入列值确实需要引号。 另外要记住是,您不要为equip_id列输入值。这是因为只要创建表新行,就会自动生成此项。...-16 (1 row) 您注意到slide不再是表格一部分。...更新表数据 到目前为止,您已经学习了如何向表添加记录以及如何删除它们,但本教程尚未介绍如何修改现有条目。 您可以通过查询所需记录并将列设置为您要使用值来更新现有条目的值。...您可以查询“swing”记录(这将匹配表每个 swing)并将其颜色更改为“red”。

    5.4K60

    精通字符串,面试官竟然问我JavaString有没有长度限制!?

    String是Java很重要一个数据类型,除了基本数据类型以外,String是被使用最广泛了,但是,关于String,其实还是有很多东西容易被忽略。...就如本文我们要讨论问题:JavaString有没有长度限制? 这个问题要分两个阶段看,分别是编译期和运行期。不同时期限制不一样。...1 编译期 首先,我们先来合理推断一下,当我们在代码中使用String s = "";形式来定义String对象时候,""字符个数有没有限制呢?...JavaUTF-8编码Unicode字符串在常量池中以CONSTANT_Utf8类型表示。...也就是说,在Java,所有需要保存在常量池中数据,长度最大不能超过65535,这当然也包括字符串定义咯。

    1.5K30
    领券