Java текст и цвет (0, 0, 0, 0)
Я пишу программу с неокрашенной рамкой, и текст на ней отображается неправильно. Я уверен, что эта строка вызывает проблему, но не знаю почему:
setBackground(new Color(0, 0, 0, 0));
Вот как выглядит текст и как он должен выглядеть
Вот мой код: это короткая версия моего обычного файла, поэтому он может показаться запутанным. Кроме того, я работаю с Java только полторы недели.
import java.awt.Dimension;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import static java.awt.GraphicsDevice.WindowTranslucency.*;
public class MyTunesMain {
public static void main(String[] args) {
//MyTunes myTunes = new MyTunes();
ShortTest myTunes = new ShortTest();
}
}
///////////////////////////////////////////
import java.awt.*;
import javax.swing.*;
public class ShortTest extends JFrame {
// id
private static final long serialVersionUID = 1L;
// basic inits
private int width = 1000;
private int height = 600;
SoundThread music;
Font searchFont = new Font("Calibri", Font.PLAIN, 18);
Container content = getContentPane();
// JFrame stuff
JFrame jf = new JFrame();
JPanel topPanel = new JPanel();
JPanel mainPanel = new JPanel();
private JLabel songPlayed;
// //////////////////////////////////////////////
public ShortTest() {
// initialize window and technical properties
super("ShortTest");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//dimension
int extendBy=30;
setMaximumSize(new Dimension(width + extendBy, height + extendBy));
setMinimumSize(new Dimension(width + extendBy, height + extendBy));
setPreferredSize(new Dimension(width + extendBy, height extendBy));
setUndecorated(true);
setLocationRelativeTo(null);
//setBackground(new Color(0, 0, 0));
setBackground(new Color(0, 0, 0, 0)); // all hell breaks lose
getContentPane().setBackground(Color.BLACK);
setLayout(null);
// initialize jpanel for objects
mainPanel.setBounds(6, 6, width, height);
mainPanel.setLayout(null);
mainPanel.setOpaque(true);
mainPanel.setBackground(Color.gray);
add (mainPanel);
mainPanel.add(topPanel);
topPanel.setBounds(0, 0, 1000, 50);
topPanel.setLayout(null);
// setup song label
songPlayed = new JLabel("Little Wing");
songPlayed.setFont(searchFont);
FontMetrics fm = songPlayed.getFontMetrics(songPlayed.getFont());
String text = songPlayed.getText();
int textWidth = fm.stringWidth(text);
songPlayed.setBounds(500 - textWidth / 2, 2, textWidth, 15);
songPlayed.setHorizontalAlignment(SwingConstants.CENTER);
// push onto top JPanel
topPanel.add(songPlayed);
setVisible(true);
System.out.println("\n done with init...........");
}
}
1 ответ
Решение
Документация для рассматриваемого конструктора объясняет:
Создает цвет sRGB с указанными значениями красного, зеленого, синего и альфа в диапазоне (0 - 255).
Параметры:
р - красная составляющая
г - зеленый компонент
б - синий компонент
а - альфа-компонент
Последнее важно: вы устанавливаете альфа-канал на 0, что означает, что цвет на самом деле не цвет, а прозрачность... Цветовое пространство RGBA Wiki article
Решение
- использование
new Color(0,0,0,255);
указать 100% непрозрачный черный - или использовать
new Color(0,0,0);
как из документа: "Альфа по умолчанию установлена в 255."