2013-02-06 45 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

非常有启发性的答案。您提供的解决方案非常完美。我会在几分钟内将您的答案标记为已接受 –