2013-12-09 4 views
1

Как она стоит, я пытаюсь нарисовать строку отключения компонента в кадр, то 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); 

Теперь, как он стоит, границы в конструкторе моего компонента показывает вверх и там, где я хочу его но String, которую я хочу нарисовать, нигде не видно. Я что-то упускаю или что-то не так?

Спасибо,

+0

Не знал, что вы изменили положение x/y на этикетке! Начните с использования '0, g.getFontMetrics(). GetAscent()', чтобы убедиться, что 'String' фактически нарисован. Вы можете рисовать только в пределах видимой области компонента ... Это или изменить метод getPreferredSize для возврата соответствующего размера ... – MadProgrammer

+0

Да, строка, нарисованная, я пытаюсь перерисовать ее в течение таймера, но я отказываюсь от этого хаха. – krieg

+0

Убедитесь, что ссылки на компоненты верны. То есть компонент, который вы пытаетесь обновить, на самом деле тот, что есть на экране. – MadProgrammer

ответ

2

Вы не переопределить getPreferredSize() метод класса PanelEstado, поэтому размер равен нулю, так что компонент никогда не окрашены.

Почему вы даже используете панель для этого. Что не так с JLabel и использованием метода setText (...). Тогда вам не нужно беспокоиться о настройке предпочтительного размера.

+0

Текст обновляется каждую секунду, используя JLabel, который постоянно обновляется, в основном заставляет кадр перерисовываться и мешает размещению определенных объектов. Если бы я мог сделать так, чтобы обновления JLabel обновлялись, а не весь кадр, это было бы неплохим решением. – krieg

+0

@krieg, хорошая точка, но именно поэтому «статусная метка» обычно показана горизонтально в нижней части рамки/панели, так что она не влияет на горизонтальную ширину. – camickr

+0

Я показываю его в верхней части рамки, а не на дне, может быть, это причина, из-за которой все бесполезно? – krieg

Смежные вопросы