2017-02-15 4 views
0

Ich habe versucht, ein Programm zu machen, mit dem der Benutzer Quadrate und Kreise einer Farbe erstellen kann, die sie mit JSliders setzen können. Ich versuche, GroupLayout zu verwenden, um dies einzurichten, aber es funktioniert nicht so, wie es scheint.GroupLayout nicht richtig ausgerichtet

Ich möchte, dass die Kreis-, Quadrat- und Farbschaltflächen nebeneinander angezeigt werden, aber für die JSliders und ihren Namen werden JLabels horizontal mit dem Farb-JButton angezeigt (von dort abwärts).

Sie erscheinen jedoch so, als würden sie nur flowlayout verwenden, indem sie von rechts nach links gehen und zu einer neuen Zeile führen, wenn sie nicht passen.

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 
     } 

Ich habe umsah, und nicht wirklich keinen Grund gesehen, warum dies geschieht. Nach vielem Graben und Nachdenken habe ich immer noch keine Ahnung, warum das funktioniert. Ich habe meine Klammern wahrscheinlich 20 mal überprüft, und ich habe sie in weitere Anweisungen aufgeteilt, um zu garantieren, dass sie nicht das Problem sind, aber es passiert immer noch.

Jede Hilfe wird sehr geschätzt!




Antwort

1

Nun, verpassten Sie eine einzige Zeile Code

Diesen

setLayout(layout); 

Kurz nach dieser

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

täglichen Dosis von „Ich bin m eine ID Iot, "überprüfen. Vielen Dank! –

Verwandte Themen