2013-02-06 59 views
0

我的問題是,JSpinner(在代碼中命名爲spinnerCantidadPuntas)有時根本不顯示,或者只是有bug。當我運行項目(F6)時,它幾乎保證不能正常顯示,當我調試它(​​CTRL + F5)時,它大部分時間顯示正常。我不知道爲什麼。繼承人使用什麼即時通訊的詳細信息:JSpinner有時無法正常顯示

產品版本:NetBeans IDE 7.2.1(內部版本201210100934) Java:1.7.0_11; Java HotSpot(TM)客戶機VM 23.6-b04 系統:在x86上運行的Windows 7版本6.1; CP1252; es_VE(NB)

我做了一個項目,即時通訊列出所有類別的,我沒有打擾添加一個JAR文件,因爲我知道脂肪酶不會想下載或運行它以爲它是一個內容在這裏

package estrella; 
    public class Main { 
     public static void main(String[] args) { 
      Interfaz f=new Interfaz(); 
     } 
    } 



    package estrella; 
    import java.awt.Color; 
    import java.awt.Container; 
    import java.util.Hashtable; 
    import javax.swing.JFrame; 
    import javax.swing.JLabel; 
    import javax.swing.JSlider; 
    import javax.swing.JSpinner; 
    import javax.swing.SpinnerNumberModel; 
    public class Interfaz extends JFrame { 

     Container c; 

     AreaDeDibujos lienzo; 

     JLabel lInfo,lCantidadPuntas,lTamanioEstrella,lLargoPuntas; 
     JSpinner spinnerCantidadPuntas; 
     JSlider sliderTamanioEstrella,sliderLargoPuntas; 

     public Interfaz(){ 

      setTitle("Ejemplo <<Dibujo de primitivas y poligonos>> Version 1.0 (05/02/2013)"); 
      setSize(1024,720); 
      setResizable(false); 
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      setLocationRelativeTo(null); 
      setVisible(true); 

      c=getContentPane(); 
      c.setBackground(new Color(240,250,245)); 
      c.setLayout(null); 

      /*lienzo=new AreaDeDibujos(); 
      lienzo.setBounds(25,25,800,600); 

      c.add(lienzo);*/ 

      lInfo=new JLabel("Por favor, seleccione los parametros de la estrella a dibujar:"); 
      lInfo.setBounds(10,10,350,20); 
      c.add(lInfo); 

      lCantidadPuntas=new JLabel("Numero de puntas de la estrella: "); 
      lCantidadPuntas.setBounds(10,35,350,20); 
      c.add(lCantidadPuntas); 
      spinnerCantidadPuntas=new JSpinner(new SpinnerNumberModel(7, //valor inicial 
                   Estrella.MINIMO_PUNTAS, //valor minimo 
                   Estrella.MAXIMO_PUNTAS, //valor maximo 
                   1 // incremento/decremento (paso) 
                  ) 
             ); 
      spinnerCantidadPuntas.setBounds(10,55,120,20); 
      c.add(spinnerCantidadPuntas); 

      lTamanioEstrella=new JLabel("Tamaño de la estrella (pixeles): "); 
      lTamanioEstrella.setBounds(10,80,350,20); 
      c.add(lTamanioEstrella); 
      sliderTamanioEstrella=new JSlider( 
            JSlider.HORIZONTAL, 
            AreaDeDibujos.TAMANIO_ESTRELLA_MINIMO, 
            AreaDeDibujos.TAMANIO_ESTRELLA_MAXIMO, 
            (int)(AreaDeDibujos.TAMANIO_ESTRELLA_MAXIMO/2) 
            ); 
      Hashtable etiquetasDelSlider1 = new Hashtable(); 
      int i,cantidadDeRayas,rango,paso,minimo,maximo,valorDeLaRaya; 
      minimo=AreaDeDibujos.TAMANIO_ESTRELLA_MINIMO; 
      maximo=AreaDeDibujos.TAMANIO_ESTRELLA_MAXIMO; 
      rango=maximo-minimo; 
      cantidadDeRayas=10; 
      paso=rango/cantidadDeRayas; 
      for(i=0;i<=cantidadDeRayas;i++){ 
       valorDeLaRaya=minimo+paso*i; 
       etiquetasDelSlider1.put(new Integer (valorDeLaRaya), new JLabel(""+valorDeLaRaya)); 
    } 
      sliderTamanioEstrella.setLabelTable(etiquetasDelSlider1); 
      sliderTamanioEstrella.setPaintLabels(true); 
      sliderTamanioEstrella.setMajorTickSpacing(10); 
      sliderTamanioEstrella.setPaintTicks(true); 
      sliderTamanioEstrella.setBounds(10,100,350,60); 
      c.add(sliderTamanioEstrella); 
     } 

    } 

    package estrella; 
    public class Estrella { 
     public static final int MINIMO_PUNTAS=3,MAXIMO_PUNTAS=10; 
    } 

    package estrella; 
    public class GestorDeEventos { 
    } 

    package estrella; 
    import javax.swing.JComponent; 
    public class AreaDeDibujos extends JComponent { 
     public static final int TAMANIO_ESTRELLA_MINIMO=50,TAMANIO_ESTRELLA_MAXIMO=400; 
    } 

病毒

回答

1

「我的問題是,JSpinner的」,其實,這是缺乏適當的佈局管理器...

使用null佈局管理器意味着任何時候你invali約會容器(通過添加一些東西),容器不會以重繪管理器將識別的方式更新自身。

setVisible(true);移動到構造函數的末尾。

如果您使用的是佈局管理器,您可以改爲revalidate/repaint

+0

非常有啓發性的答案。您提供的解決方案非常完美。我會在幾分鐘內將您的答案標記爲已接受 –