Вот контекст, если это необходимо для любых ответов. Я создаю двигатель, в котором я собираюсь сделать видеоигр. Он содержит таблицу букв 96 x 54 (столбцы x строк), чтобы обеспечить равномерное расстояние между ними. Из-за этого было бы очень полезно, если бы любые решения могли быть как наименее ресурсоемкими, так и разумно достижимыми. Я сделал веб-демо для этого движка, который работал точно так, как предполагалось, кроме того, что он немного медленный. Теперь я переношу проект на Java, и некоторые вещи работают не так, как предполагалось.Разрешить текст в нескольких JLabels для перекрытия
Чтобы имитировать HTML <table>
Я использовал GridLayout
из JLabel
S внутри пары JPanel
с, чтобы держать проклейки постоянным, все внутри JFrame
. Проблема, с которой я сталкиваюсь, заключается в том, что из-за изменения размера таблицы для улучшения внешнего вида JLabels немного перекрываются. В веб-демо это было прекрасно, так как письма просто вошли в следующую коробку. Это то, чего я пытаюсь достичь на Java, и не могу, чтобы жизнь меня узнала, как это сделать.
Вот изображение, чтобы показать вам, что я имею в виду:
В веб-демо на левой мы имеем круг подчеркиванием внутри круга «а» с, а буквы «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 ");
}
}
Здравствуйте и добро пожаловать. Для того, чтобы помочь нам лучше понять вашу проблему, рассмотрите упрощение и улучшение вашего опубликованного кода таким образом, чтобы он: 1) не имеет внутри кода никакого отношения к вашей проблеме, 2) очень мало, 3) компилирует и запускает немодифицированный, то есть , это целый класс/программа сам по себе и 4) демонстрирует вашу проблему для нас, [mcve]. Этот код должен быть размещен здесь, как вы сейчас делаете, а не в ссылке. –
Например, я не могу в настоящее время запускать ваш код выше, так как он имеет зависимости, к которым у меня нет доступа, включая MAINFRAME, floor (...), ресурс изображения ... и он не размещен как компилируемый и исполняемый файл класса, в комплекте с заголовком класса и импортом. –
... и я не 100% в отношении эффекта, который вы пытаетесь создать, и проблем, которые могут возникнуть у вас, но часто проблемы в этой категории связаны с попыткой искусственного ограничения размеров компонентов и контейнеров. –