GroupLayout 未正确对齐
GroupLayout not aligning properly
我一直在尝试制作一个程序,允许用户创建他们可以使用 JSliders 设置的颜色的正方形和圆形。我正在尝试使用 GroupLayout 来设置它,但它没有按照它看起来应该的方式工作。
我希望圆形、方形和彩色按钮彼此相邻显示,但 JSliders 及其名称 JLabel 与彩色 JButton 水平对齐(从它向下)。
但是,它们看起来好像只是使用流式布局,从右到左,如果不合适则向下移动到新行。
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 次,并且我将它分成更多的语句以保证它们不是问题所在,但它仍在发生。
非常感谢任何帮助!
好吧,你漏掉了一行代码
添加这个
setLayout(layout);
紧接着
layout.setHorizontalGroup(hGroup);
layout.setVerticalGroup(vGroup);
我一直在尝试制作一个程序,允许用户创建他们可以使用 JSliders 设置的颜色的正方形和圆形。我正在尝试使用 GroupLayout 来设置它,但它没有按照它看起来应该的方式工作。
我希望圆形、方形和彩色按钮彼此相邻显示,但 JSliders 及其名称 JLabel 与彩色 JButton 水平对齐(从它向下)。
但是,它们看起来好像只是使用流式布局,从右到左,如果不合适则向下移动到新行。
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 次,并且我将它分成更多的语句以保证它们不是问题所在,但它仍在发生。
非常感谢任何帮助!
好吧,你漏掉了一行代码
添加这个
setLayout(layout);
紧接着
layout.setHorizontalGroup(hGroup);
layout.setVerticalGroup(vGroup);