não aparece todos os buttons, labels

9 respostas
T

ola pessoal! sou iniciante em java, estou tentando fazer esse applet porém não aparece todos os buttons e etc q estão no panel.. msm aumentando o tamanho da janela, não aparece td.. alguém pode me orientar?
ps: to usando o netbeans

import java.applet.Applet;
import java.awt.*;
import javax.swing.JLabel;

import javax.swing.JRadioButton;
import javax.swing.JTextField;

public class MoveBox extends Applet
{ int w,h;


   private Button iniciar = new Button("iniciar");
   private Button pausar = new Button("Pausar");
   private Button continuar = new Button("Continuar");
   private JLabel massa = new JLabel("Massa:"); private JLabel kg = new JLabel("kg");
   private JLabel k = new JLabel("Constante da mola (k):");private JLabel nm = new JLabel("N/m");
   private JLabel a = new JLabel("Amplitude");private JLabel m = new JLabel("m");
   private JLabel osc = new JLabel("Período de Oscilação");private JLabel oscresp = new JLabel("");
   private JLabel s = new JLabel("s");
   private JRadioButton elong = new JRadioButton("Elongação",true);
   private JRadioButton v = new JRadioButton("Velocidade",false);
   private JRadioButton e = new JRadioButton("Energia",false);
   private JTextField txtmassa = new JTextField(3);
    private JTextField txtk = new JTextField(3);
     private JTextField txta = new JTextField(3);

   public void init()
   { setSize(400,250);
       w = 350;
    h = 200;
       setBackground(Color.white);
      Panel control = new Panel();
      

      control.add(massa); control.add(txtmassa);  control.add(kg);
       control.add(k); control.add(txtk); control.add(nm);
       control.add(a);  control.add(m);
       control.add(osc); control.add(oscresp); control.add(s);
      control.add(iniciar);
      control.add(pausar);
      control.add(continuar);
      control.add(nm);
      control.setPreferredSize(new Dimension(w,100));
      control.setBackground(Color.lightGray);
      setLayout(new BorderLayout());
      add("South", control);
   }
 
   public void paint(Graphics g)
   {

         g.setColor(Color.BLACK);
         g.drawLine(125, 0, 225,0);//apoio do pendulo
         g.drawLine(w/2, 0, w/2,10);//inicio do pendulo
          g.drawLine((w/2), (h/2)-30, w/2,(h/2)+10);// fim do pendulo
         for(int i = 0; i< 55; i+=5) //mola
          g.drawOval((w/2)-12, 10+i, (w/2)-150 , 10);

         g.setColor(Color.RED);
         g.fillOval((w/2)-17 , (h/2) -20, (w/2) -140, (h/2)-70);
   }
 
}

obrigada desde já!

9 Respostas

marcospaulo.suporte

bom dia.

na aba ‘inspector’ onde mostra os componentes que tem no seu formulário, aparece esses objetos? Se sim… o problema está na posição deles…

Veja como está as propriedades ‘MaximumSize’, ‘MinimumSize’, ‘preferedSize’.

ViniGodoy

Quem faz essas coisas aparecerem é o método paint. Como você sobrescreveu esse método para incluir o seu próprio, você tem duas saídas:

  1. Chamar super.paint(g) na primeira linha do seu método paint;
  2. Fazer a pintura no método PaintComponent de um JPanel, e então incluir esse JPanel no seu applet.

Lembre-se também que é importante tirar uma cópia do contexto gráfico antes de utiliza-lo.

Graphics2D g2d = g.create(); //Desenhe usando g2d g2d.dispose();

Eu optaria pela segunda saída, pois dá mais flexibilidade ao programa, e deixa mais fácil de posicionar o desenho no futuro.
Se você estiver programando um jogo, aí sim, use a primeira alternativa.

JoaoBluSCBR

Não testei seu código, mas tudo indica que seja o fato de que você usou o BorderLayout

e só colocou todos os teus controles na parte SOUTH dele.

tente colocá-los de maneira mais controlado usando as diversas posicoes do BorderLayout

control.add(massa, BorderLayout.NORTH);

control.add(txtmassa, BorderLayout.SOUTH);

control.add(kg), BorderLayout.EAST);

control.add(k, BorderLayout.WEST);

control.add(txtk, BorderLayout.CENTER);

Ou use só no CENTER, que afinal é a área maior. Veja:

T

na aba ‘inspector’ onde mostra os componentes que tem no seu formulário, aparece esses objetos? Se sim… o problema está na posição deles…

Veja como está as propriedades ‘MaximumSize’, ‘MinimumSize’, ‘preferedSize’.

como tá fazendo “a mão” não aparece essas opções no netbeans, só aparece qnd tá usando o Applet Form

Quem faz essas coisas aparecerem é o método paint. Como você sobrescreveu esse método para incluir o seu próprio, você tem duas saídas:

  1. Chamar super.paint(g) na primeira linha do seu método paint;
  2. Fazer a pintura no método PaintComponent de um JPanel, e então incluir esse JPanel no seu applet.

seu eu coloco super.paint(g); o desenho some

============

qnd coloco pra rodar, tá acontecendo isso http://imageshack.us/photo/my-images/851/cmsetsize.jpg/

qnd tiro setsize, o panel aparece em cima do desenho e preciso desse desenho pq terei q fazer uma movimentação cm ele
fica assim http://imageshack.us/photo/my-images/718/semsetsize.jpg/

L

use o NB então.

simples

ViniGodoy

Leia o que eu escrevi.

tahinf:
qnd tiro setsize, o panel aparece em cima do desenho e preciso desse desenho pq terei q fazer uma movimentação cm ele
fica assim http://imageshack.us/photo/my-images/718/semsetsize.jpg/

Leia o que eu escrevi.

T

então não sei como faço o desenho utilizando o netbeans =/

 se referindo <blockquote>   1. Graphics2D g2d = g.create();

2. //Desenhe usando g2d

3. g2d.dispose();  </blockquote>

e onde colocaria isso? no public void paint(Graphics g)?

ViniGodoy
Isso, seu método paint ficaria assim:
public void paint(Graphics g)   {  
    super.paint(g);

    Graphics2D g2d = (Graphics2D) g.create();
    g2d.setColor(Color.BLACK);  
    g2d.drawLine(125, 0, 225,0);//apoio do pendulo  
    g2d.drawLine(w/2, 0, w/2,10);//inicio do pendulo  
    g2d.drawLine((w/2), (h/2)-30, w/2,(h/2)+10);// fim do pendulo  
    for(int i = 0; i< 55; i+=5) //mola  
        g2d.drawOval((w/2)-12, 10+i, (w/2)-150 , 10);  
  
    g2d.setColor(Color.RED);  
    g2d.fillOval((w/2)-17 , (h/2) -20, (w/2) -140, (h/2)-70);  
    g2d.dispose();
}

Mas, pelo seu desenho, seria melhor ainda sobrescrever um JPanel e fazer esse método ser parte do PaintComponent do painel. E depois só encaixar esse painel no seu frame.

T

desculpa, mas acho que não entendi mto bem o q quer dizer (to começando em java agora), tem como me dar um exemplo?

Criado 7 de julho de 2011
Ultima resposta 7 de jul. de 2011
Respostas 9
Participantes 5