允许多个JLabel中的文本重叠

G-Meister

如果需要任何答案,这里是上下文。我正在构建一个用于制作视频游戏的引擎。它涉及一个96 x 54(列x行)的字母表,以使它们之间保持均匀的间距。因此,如果任何解决方案都可以在合理可行的范围内尽可能减少资源密集型,那将非常有帮助。我为此引擎制作了一个Web演示,该演示完全按预期工作,除了有点慢之外。现在,我将项目迁移到Java,有些事情并没有按预期进行。

为了模仿HTML,<table>GridLayoutJLabels中使用了的ofJPanel来保持大小不变​​,全部都在a中JFrame我面临的问题是,由于更改了表格的大小以改善外观,因此JLabel略有重叠。在网络演示中,这很好,因为字母只是进入了下一个框。这就是我试图用Java实现的目标,而我一生都无法找到如何实现的目标。

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

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

在左侧的Web演示中,在“ a”的圆圈内有一个下划线圆圈,在右侧的字母为“ pqyjg”。下划线之一上还有一个小灰色框。这是下划线下方的突出显示框,显示下划线与其重叠1个像素。

当我们将相同的代码放入Java版本时,下划线无处可见,并且字母“ pqyjg”的尾部被切除。期望的效果是它可以像左侧的示例一样工作。

我已经搜索了该站点,互联网的其余部分以及许多Java类页面,以寻找一种无济于事的方法。

谁能指出我可以在JLabels或任何其他组件上调用的类或方法来实现这种效果,而无需更改表的大小?

这是我当前的代码,用于设置所有内容以防万一。

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                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  ");
    }
}
充满鳗鱼的气垫船

根据我的评论:

...而我并不是100%地试图创建效果以及可能遇到的问题,但是此类中的问题通常是由于试图人为地限制组件和容器的大小而引起的

是的,您的问题是您使用来人为地限制布局JPanel的大小layout.setPreferredSize(new Dimension(1056, 594));,并且这妨碍了其所包含的所有组件的正确显示。如果您摆脱了这一行,然后打包并setVisible(true)您的JFrame,则在将其填充数据之后,您将看到全文。


你的评论:

我试图保持表的大小不变,但是让JLabel重叠,以便它们的文本可以从一个溢出到另一个。

考虑选项2:不要使用JLabels,而是将所需的文本直接绘制到JPedel的paintComponent方法中显示的BufferedImage中,或者直接绘制在JPenel的paintComponent方法本身中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在UFW中同时允许多个端口?

来自分类Dev

在 JLabel 中复制的文本

来自分类Dev

TableView AllowsMultipleSelection-仍允许多个选择

来自分类Dev

COM对象注册-允许多个?

来自分类Dev

htaccess RewriteEngine URI,允许多个斜杠

来自分类Dev

Birt报表参数允许多个值

来自分类Dev

Rails 4要求并允许多个

来自分类Dev

RPM规范-如何允许多个版本

来自分类Dev

RxJava允许多个onError调用

来自分类Dev

如何允许多个步骤定义匹配

来自分类Dev

为什么在XML中允许多个'>'

来自分类Dev

Mysqli不允许多个查询?

来自分类Dev

PHP-允许多个响应

来自分类Dev

Birt报表参数允许多个值

来自分类Dev

流星-允许多个用户编辑帖子

来自分类Dev

在EnableCors()中允许多个来源

来自分类Dev

允许多个python文件之间的通信

来自分类Dev

WebStorm 运行/调试允许多个脚本

来自分类Dev

互斥量允许多个线程通过

来自分类Dev

在Spring Security中@Secured批注中是否使用'or'条件允许多个角色

来自分类Dev

XSD中的xs:choice是否在结果XML中允许多个元素?

来自分类Dev

如果在cpp中输入了错误的数据类型,如何允许多个输入?

来自分类Dev

在Access 2010多列索引中不允许多个Null值

来自分类Dev

Jenkins结帐流程步骤中是否允许多个“扩展”值?

来自分类Dev

为什么Linux在中央存储库中不允许多个版本?

来自分类Dev

根据用户在cakephp中的角色允许多个控制器

来自分类Dev

我如何使用信号允许多个用户在 Flask-user 中具有相同的角色

来自分类Dev

如何允许多个卸载程序在同一目录中独立工作?

来自分类Dev

如何允许多个线程访问 C++ 中匹配条件的临界区

Related 相关文章

热门标签

归档