drawString()不会绘制

时间:2013-12-09 03:43:34

标签: java swing jpanel paintcomponent

目前我正试图将一个组件的字符串绘制成一个框架,SSCCE将是这样的:

// The component class through which I draw the string!
package gui;

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JPanel;
import javax.swing.border.LineBorder;

public class PanelEstado extends JPanel{

    private String valores = "";

    protected void paintComponent(Graphics g){

        super.paintComponent(g);
        g.setColor(Color.BLACK);

        g.drawString(valores, 400, 45);

    }

    public void setValores(int arca, int puntosBelleza, int cantidadHabitantes, int cantidadHabitantesDisponibles){

        String valores = "Arca: " + arca 
                + "                                    " 
                + " Puntos de Belleza: " + puntosBelleza + 
                "                                    " + 
                " Habitantes: " + 
                cantidadHabitantes + " / " 
                + cantidadHabitantesDisponibles;
    }

    public PanelEstado(){
        setBorder(new LineBorder(Color.RED));
    }


}

// The Main GUI Class!

public GUIJuego(){

    JPanel panelConstruccion = new JPanel(new GridLayout(9,1));
    JPanel panelDatosCiudad = new JPanel(new GridLayout(1,2));
    JPanel panelMapa = new JPanel(new GridLayout(25,25));
    PanelEstado panEst = new PanelEstado();
        add(panelConstruccion, BorderLayout.WEST);

    add(panelDatosCiudad, BorderLayout.NORTH);
    panelDatosCiudad.add(labelConstrucciones);
    panEst.setValores(administrador.getCiudad().getArca(), administrador.getCiudad().getPuntosBelleza(), administrador.getCiudad().getCantidadHabitantes(), administrador.getCiudad().getCantidadHabitantesDisponibles());
    panelDatosCiudad.add(panEst);
    add(panelMapa, BorderLayout.CENTER);
}

让我稍微缩小搜索范围。其中最重要的部分是SSCCE中的第一个类,并且:

    panEst.setValores(administrador.getCiudad().getArca(), administrador.getCiudad().getPuntosBelleza(), administrador.getCiudad().getCantidadHabitantes(), administrador.getCiudad().getCantidadHabitantesDisponibles());
    panelDatosCiudad.add(panEst);

现在,正如它所说的那样,我的Component的构造函数中的边框确实显示出来并且正好在我想要它的位置,但是我想要绘制的String无处可见。我错过了什么,或做错了什么?

谢谢,

1 个答案:

答案 0 :(得分:2)

您没有覆盖PanelEstado类的getPreferredSize()方法,因此大小为零,因此组件永远不会被绘制。

为什么你甚至使用面板呢? JLabel和使用setText(...)方法有什么问题。然后您无需担心设置首选大小。