2017-02-15 97 views
0

我一直在試圖製作一個程序,允許用戶創建可使用JSliders設置的顏色的正方形和圓形。我正在嘗試使用GroupLayout來設置它,但它不像它應該的那樣工作。GroupLayout未正確對齊

我希望圓形,方形和顏色按鈕彼此相鄰,但JSliders和它們的名稱JLabels水平出現與Color JButton(從它下降)進行了整齊排列。

但是,它們看起來好像只是使用flowlayout,如果它們不合適,則會從右到左移動到新行。

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 
     } 

我環顧四周,並沒有真正看到任何理由,爲什麼發生這種情況。經過大量的挖掘和思考,我仍然不知道爲什麼這是行得通的。我查了大概20次括號,並且把它分成了更多的陳述以保證它們不是問題,但它仍然在發生。

任何幫助,非常感謝!




回答

1

嗯,你錯過了一個單一的代碼行

添加此

setLayout(layout); 

就在這個

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

的「我的日常劑量後一個ID Iot,「檢查。非常感謝! –