【发布时间】:2019-10-12 21:45:39
【问题描述】:
我正在使用以下语句解决一个活动:创建一个应用程序以在 JDialog 窗口中显示八个 JPanel 组件。每个面板应使用图 1 中的八种颜色之一着色。 Figure 1
在每个面板上都应该写下翻译颜色含义的单词。使用 18 号字体。每个面板应使用表 1 中的颜色着色,指定与颜色含义相对应的每个 RGB(红、绿、蓝)分量的数量。使用 java.awt.Color 类。应该只实现一个 paintComponent 方法来绘制 8 个面板并写入每种颜色的含义。 Table 1
问题是我的 JPanel 没有出现在 JDialog 中。而且我不知道如何让它出现。
按照代码:
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.GridLayout;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class SigCoresGUI extends JDialog {
private static final long serialVersionUID = 1L;
private Color[] cores = { new Color(255, 255, 255), new Color(249, 206, 137), new Color(255, 128, 0),
new Color(255, 0, 0), new Color(244, 102, 174), new Color(5, 120, 203), new Color(116, 186, 160),
new Color(0, 0, 0) };
private String[] sig = { "Paz", "Energia", "Criatividade", "Paixão", "Ternura", "Tranquilidade", "Harmonia",
"Elegância" };
private Font font = new Font("Arial", Font.BOLD, 18);
public SigCoresGUI() {
super();
Desenha desenha = new Desenha();
add(desenha);
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
setLocationByPlatform(true);
setLayout(new GridLayout(8, 8));
setSize(400, 500);
setVisible(true);
}
public class Desenha extends JPanel {
private static final long serialVersionUID = 1L;
@Override
public void paintComponents(Graphics g) {
super.paintComponents(g);
for (int i = 0; i < 8; i++) {
JPanel panel = new JPanel();
panel.setBackground(cores[i]);
panel.setFont(font);
JLabel label = new JLabel(sig[i]);
label.setFont(font);
if (i > 0)
label.setForeground(Color.WHITE);
panel.add(label);
add(panel);
}
}
}
}
【问题讨论】:
-
事实上,我敢打赌,paintComponents 从不被调用,因为您的 JPanel 最初没有添加任何组件
-
@Abra 确实,在实现自定义绘画时,应该覆盖
paintComponent,但是在这种情况下,不应覆盖任何绘画方法。