[英]Components on the JPanel doesn't show
I created a JPanel and i modify it a bit. 我创建了一个JPanel,并对其进行了一些修改。 I change it's background to gradient color here is the class. 我将其背景更改为渐变颜色,这是该类。
public class JGradientPanel extends JPanel {
private static final int N = 32;
private Color color1, color2;
public JGradientPanel(Color color1, Color color2) {
this.setBorder(BorderFactory.createEmptyBorder(N, N, N, N));
this.color1 = color1;
this.color2 = color2;
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
//Color color1 = getBackground();
//Color color2 = color1.darker();
int w = getWidth();
int h = getHeight();
GradientPaint gp = new GradientPaint(
0, 0, color1, 0, h, color2);
g2d.setPaint(gp);
g2d.fillRect(0, 0, w, h);
}
}
Now i added few components to the panel but it didn't display anything, here is the code 现在我在面板上添加了一些组件,但是它什么都没有显示,这是代码
public JPanel getMenu() {
JGradientPanel menu = new JGradientPanel(Color.WHITE, Color.white.darker());
int menuHeight = (int) ((int) getHeight() * 0.07);
menu.setPreferredSize(new Dimension(screenWidth,menuHeight));
menu.setLayout(new GridLayout(1,10));
menu.setBackground(Color.LIGHT_GRAY);
//test
JGradientButton test = new JGradientButton("test",Color.GREEN, Color.BLUE);
menu.add(test);
JLabel space = new JLabel(); // first blank space on the menu
space.setBounds(0, 0, menu.getPreferredSize().width - 50, menu.getPreferredSize().height);
space.setBorder(BorderFactory.createMatteBorder(0, 0, 0, 1, Color.GREEN));
menu.add(space);
JLabel moreSpaces[] = new JLabel[6];
buttons = new JButton[buttonLabels.length];
for(int counter = 0; counter < moreSpaces.length + buttonLabels.length; counter ++ ) {
if(counter < 3) {
buttons[counter] = new JButton(buttonLabels[counter]); //menu buttons
} else {
moreSpaces[counter - 3] = new JLabel(); // the rest of the blank in the menu
}
}
// adding components to menu panel
for(int counter = 0; counter < moreSpaces.length + buttonLabels.length; counter ++){
if(counter < 3) {
buttons[counter].setFocusPainted(false);
menu.add(buttons[counter]);
} else {
menu.add(moreSpaces[counter - 3]);
}
}
return menu;
}
Did i miss something or i did it wrong? 我错过了什么还是做错了吗? What's wrong with my code? 我的代码有什么问题?
override getPreferredSize
in public class JGradientPanel extends JPanel {
在public class JGradientPanel extends JPanel {
重写getPreferredSize
public class JGradientPanel extends JPanel {
Painting in Swing by public void paintComponent(Graphics g) {
by default never to returns PreferredSize to JPanel , 通过public void paintComponent(Graphics g) {
在Swing中进行绘画,默认情况下,永远不会将PreferredSize返回给JPanel ,
JPanel
returns Dimension[0, 0];
JPanel
返回Dimension[0, 0];
EDIT 编辑
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.