java 多个label放在一起_java – 允许多个JLabel中的文本重叠

如果需要任何答案,这是上下文.我正在构建一个引擎,我将制作一个视频游戏.它包含一个96 x 54(列x行)字母表,以保持它们之间的均匀间距.因此,如果任何解决方案可以像合理可行的那样资源密集度最低,那将是非常有用的.我为这个引擎做了一个网络演示,除了有点慢之外,它完全按照预期工作.现在我正在将项目迁移到Java,有些东西没有按预期工作.

模仿HTML< table>我在几个JPanels中使用了一个JLabel的GridLayout来保持大小不变??,所有这些都在JFrame中.我面临的问题是,由于改变了表的大小以改善外观,JLabels略有重叠.在网络演示中,这很好,因为字母只是进入下一个框.这就是我想用Java实现的,而且不能为我的生活找到方法.

这是一张图片,向您展示我的意思:

Sgqre.png

在左侧的网络演示中,我们在“a”的圆圈内有一圈下划线,右边有字母“pqyjg”.其中一个下划线上还有一个灰色小盒子.这是下划线下方突出显示的框,显示下划线与其重叠1个像素.

当我们将相同的代码放入Java版本时,下划线无处可见,字母“pqyjg”上的尾部被切断.期望的效果是它像左边的例子一样工作.

我搜索过这个网站,其余的互联网以及许多Java类页面,寻找一种有用的方法,但无济于事.

任何人都可以指向我可以在JLabel或任何其他组件上调用的类或方法来实现此效果,而无需更改表的大小?

这是我当前设置所有内容的代码,以防它帮助任何人.

import javax.swing.*;

import static java.lang.Math.*;

import java.awt.*;

public class transparencyExample{

//Declaring constants

public static final Color[] MAINFRAME = {new Color(0x35ce4a), new Color(0x111111)};

//Creating static variables and methods

private static JLabel tempLabel;

private static JLabel[][] table = new JLabel[54][96];

private static JPanel layout = new JPanel(new GridLayout(54,96));

private static JPanel background = new JPanel();

private static BoxLayout box = new BoxLayout(background, 0);

private static JFrame frame = new JFrame("Transparency Example");

private static void initialise(){

//Adding labels to table

for (int i = 0; i < 5184; i++){

tempLabel = new JLabel("M", SwingConstants.CENTER);

tempLabel.setFont(new Font("Courier", Font.PLAIN, 15));

table[(int) floor((double) i / 96)][i % 96] = tempLabel;

}

//Laying out the table

layout.setPreferredSize(new Dimension(1056, 594));

layout.setOpaque(false);

for(int i = 0; i < 5184; i++){

layout.add(table[(int) floor((double) i / 96)][i % 96]);

}

background.setBackground(MAINFRAME[1]);

background.add(layout);

//Laying out the frame

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.add(background);

frame.pack();

frame.setLocationRelativeTo(null);

frame.setVisible(true);

}

//Fill table

public static void fill(String s){

for(int i = 0; i < 5184; i++){

table[(int) floor((double) i / 96)][i % 96].setText(String.valueOf(s.charAt(i)));

}

}

public static void main(String[] args){

initialise();

transparencyExample.fill(" aaaaaaaa a a aa a _____ a a _ ___ a a_ __ a a _ _ a pqyjg aa _ _ a a _ _ a a _ _ a a _ _ a a _ _ a a _ _ a a __ _ a a __ __ a a _______ a a a a aa aa a aa aa aa aaaa ");

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值