2017-02-15 1 views
0

J'ai essayé de créer un programme qui permet à l'utilisateur de créer des carrés et des cercles d'une couleur qu'ils peuvent définir à l'aide de JSliders. J'essaie d'utiliser GroupLayout pour le configurer, mais cela ne fonctionne pas comme il le devrait. Je veux que les boutons de cercle, de carré et de couleur apparaissent l'un à côté de l'autre, mais pour que les JSliders et leur nom JLabels apparaissent horizontalement alignés avec le JButton de couleur (en descendant de celui-ci).GroupLayout ne s'aligne pas correctement

Cependant, ils semblent juste utiliser flowlayout, allant de droite à gauche et portant à une nouvelle ligne si elles ne correspondent pas.

Image of components being placed side to side

import java.util.ArrayList; 
import java.text.*; 
import javax.swing.*; 
import javax.swing.GroupLayout; 
import java.awt.event.*; 
import java.awt.*; 
import javax.swing.event.*; 

public class SMYS01 extends JFrame{ 

    private JLabel redL=new JLabel("red"), greenL=new JLabel("green"), blueL=new JLabel("blue"), alphaL=new JLabel("alpha"); 
    private JButton openColorSliders=new JButton("Change colors"); 
    private JSlider red=new JSlider(JSlider.HORIZONTAL, 0,255,130); 
    private JSlider green=new JSlider(JSlider.HORIZONTAL, 0,255,130); 
    private JSlider blue=new JSlider(JSlider.HORIZONTAL, 0,255,130); 
    private JSlider alpha=new JSlider(JSlider.HORIZONTAL, 0,255,255); 
    private int redColor=130, blueColor=130, greenColor=130, alphaColor=255;  

    public static void main(String[] args) { 
     SMYS01 window = new SMYS01();  
    } 


    private JButton makeSquareB = new JButton("New Square" /*, add icon later*/); 

    private JButton makeCircleB = new JButton("New Circle"); 

    private Color background = new Color(0, 150, 0); 



    public SMYS01(){ 
     //Anonymous actionlisteners and changelisteners for each button and slider. 
     //not essential for layout problems so leaving them out 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     getContentPane(); 
     pack(); 
     setLocationRelativeTo(null); 
     setVisible(true); 
     MyPanel thing = new MyPanel(); 

     setContentPane(thing); 

     setSize(thing.getPreferredSize()); 

     setTitle("Art!"); 
    } 


    private class MyPanel extends JPanel { 

     public MyPanel() { 
      //MouseMotionListener and MouseListener not related 
      GroupLayout layout = new GroupLayout(this); 
      red.setMajorTickSpacing(50); 
      red.setMinorTickSpacing(5); 
      red.setPaintTicks(true); 
      red.setPaintLabels(true); 
      blue.setMajorTickSpacing(50); 
      blue.setMinorTickSpacing(5); 
      blue.setPaintTicks(true); 
      blue.setPaintLabels(true); 
      green.setMajorTickSpacing(50); 
      green.setMinorTickSpacing(5); 
      green.setPaintTicks(true); 
      green.setPaintLabels(true); 
      alpha.setMajorTickSpacing(50); 
      alpha.setMinorTickSpacing(5); 
      alpha.setPaintTicks(true); 
      alpha.setPaintLabels(true); 
      layout.setAutoCreateGaps(true); 
      layout.setAutoCreateContainerGaps(true); 

      GroupLayout.SequentialGroup hGroup = layout.createSequentialGroup(); 
      hGroup.addComponent(makeCircleB); 
      hGroup.addComponent(makeSquareB); 
      hGroup.addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING) 
        .addComponent(openColorSliders) 
        .addComponent(redL) 
        .addComponent(red) 
        .addComponent(greenL) 
        .addComponent(green) 
        .addComponent(blueL) 
        .addComponent(blue) 
        .addComponent(alphaL) 
        .addComponent(alpha)); 

      GroupLayout.SequentialGroup vGroup = layout.createSequentialGroup(); 
      vGroup 
       .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE) 
        .addComponent(makeCircleB) 
        .addComponent(makeSquareB) 
        .addComponent(openColorSliders)); 
      vGroup 
        .addComponent(redL) 
        .addComponent(red) 
        .addComponent(greenL) 
        .addComponent(green) 
        .addComponent(blueL) 
        .addComponent(blue) 
        .addComponent(alphaL) 
        .addComponent(alpha); 
      layout.setHorizontalGroup(hGroup); 
      layout.setVerticalGroup(vGroup); 





     } 

     @Override 
     public Dimension getPreferredSize() { 
      return new Dimension(700, 500); 
     } 

     @Override 
     public void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      g.setColor(background); 
      g.drawRect((int)g.getClipBounds().getX(),(int)g.getClipBounds().getY(),(int)g.getClipBounds().getWidth(),(int)g.getClipBounds().getHeight()); 
      g.fillRect((int)g.getClipBounds().getX(),(int)g.getClipBounds().getY(),(int)g.getClipBounds().getWidth(),(int)g.getClipBounds().getHeight()); 


      //An iterated loop drawing the shapes using info from square and circle classes 
      //Both of which implement a shape interface. Not part of problem 
     } 

J'ai regardé autour, et pas vraiment vu aucune raison pour expliquer pourquoi ce qui se passe. Après beaucoup de creuser et de réfléchir, je n'ai toujours aucune idée de pourquoi cela fonctionne. J'ai vérifié mes parenthèses probablement 20 fois, et je l'ai séparé en plus de déclarations pour garantir qu'elles ne sont pas le problème, mais il se produit toujours.

Toute aide est grandement appréciée!




Répondre

1

Eh bien, vous avez manqué une seule ligne de code

Ajouter ce

setLayout(layout); 

Juste après cette

layout.setHorizontalGroup(hGroup); 
layout.setVerticalGroup(vGroup); 
+0

dose quotidienne de « Je m un identifiant iot, "vérifiez. Merci beaucoup! –