java允许多个JLabel中的文本重叠
如果有必要回答的话,这里是上下文。我正在建造一个引擎,我将在其中制作一个电子游戏。它包括一个96 x 54(列x行)的字母表,以保持它们之间的间距均匀。正因为如此,如果任何解决方案都能尽可能地减少资源密集度,这将非常有帮助。我为这个引擎做了一个网络演示,除了有点慢之外,它完全按照预期工作。现在我正在将项目迁移到Java上,有些事情并没有按预期的那样工作
为了模拟HTML <table>
,我在一对JPanel
内使用了GridLayout
个JLabel
来保持大小不变,所有这些都在JFrame
内。我面临的问题是,由于改变了表格的大小以改善外观,JLabel略微重叠。在web演示中,这很好,因为字母直接进入下一个方框。这就是我试图在Java中实现的目标,我一生都不知道该如何实现
这里有一张图片向你展示我的意思:
在左边的web演示中,我们在“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) 个答案