2013-09-22 2 views
0

Je suis en train d'obtenir mes résultats pour ressembler à ce qui suit dans un JFrame:Mise en forme des résultats dans JFrame

Cylinder 1 
Radius = 5 
Height = 5 
Volume = 392.7 

Cylinder 2 
Radius = 5 
Height = 5 
Volume = 392.7 

Cylinder 3 
Radius = 5 
Height = 5 
Volume = 392.7 

Au lieu de cela je reçois:

Cylinder 1 Radius = 5 Height = 5 
Volume = 392.7 Cylinder 2 
Radius = 5 Height = 5 
Volume = 392.7 Cylinder 3 
Radius = 5 Height = 5 
Volume = 392.7 

J'ai essayé re-dimensionnement du cadre, \ n, etc, sans chance. Si je l'agrandis, cela rend la ligne de données plus longue. Je ne peux pas le rendre assez petit pour avoir les résultats sur chaque ligne. Mon code est ci-dessous, quelqu'un peut-il me montrer ce que je manque. Merci!!

public void actionPerformed(ActionEvent e) 
      { 
       // Output JFrame variables 
       JLabel labelCylinder[] = new JLabel[3]; 
       JLabel labelRadius[] = new JLabel[3]; 
       JLabel labelHeight[] = new JLabel[3]; 
       JLabel labelVolume[] = new JLabel[3]; 
       JFrame outputFrame = new JFrame("Results"); 
       outputFrame.setBounds(150, 150, 325, 150); 
       outputFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       outputFrame.setLayout(new FlowLayout()); 

       // For loop to output results 
       for (int o=0; o<myCylinder.length;o++) 
       { 
        myCylinder[o] = new Cylinder(Double.parseDouble(textRadius[o].getText()), Double.parseDouble(textHeight[o].getText())); 


        labelCylinder[o] = new JLabel(); 
        labelCylinder[o].setText(" Cylinder " + (o+1) + "\n"); 
        labelRadius[o] = new JLabel(); 
        labelRadius[o].setText("\nRadius = " + myCylinder[o].getRadius() + "\n"); 
        labelHeight[o] = new JLabel(); 
        labelHeight[o].setText("\nHeight = " + myCylinder[o].getHeight() + "\n"); 
        labelVolume[o] = new JLabel(); 
        labelVolume[o].setText("\nVolume = " + myCylinder[o].volume() + "\n"); 

        outputFrame.add(labelCylinder[o]); 
        outputFrame.add(labelRadius[o]); 
        outputFrame.add(labelHeight[o]); 
        outputFrame.add(labelVolume[o]); 


       } 
+0

utilisation 'BoxLayout' au lieu de' FlowLayout' – nachokk

+0

Utiliser un JTextArea non modifiable – MadProgrammer

+0

Pour une meilleure aide plus tôt, un poster [SSCCE] (http://sscce.org/). BTW - que les données semblent au type qui serait le mieux présenté sous forme de tableau (en utilisant un «JTable»). –

Répondre

1

Changement outputFrame.setLayout(new FlowLayout()) à (seule colonne) GridLayout ou BoxLayout pour cela. Voir Using Layout Managers & A Visual Guide to Layout Managers

+0

Et si vous voulez simplement utiliser un JLabel, JLabel prend en charge les balises html. Vous pouvez utiliser dans une étiquette se 'label1.setText (« Rayon: somevalue
Taille: someHeight
... »)' – Optional

+0

ont travaillé avec une mise en page de la boîte et maintenant obtenir: Exception en fil "AWT-EventQueue-0" java.awt.AWTError: BoxLayout ne peut pas être partagé. Avoir lu les liens que vous avez envoyés, ont déjà été sur eux tryng pour comprendre mon problème. – Jim

+0

Si vous pouvez partager la classe runnable complète avec main, je peux essayer de le changer. – Optional