【问题标题】:Java Applet GUI positionsJava Applet GUI 位置
【发布时间】:2012-06-07 16:55:48
【问题描述】:

这是一个神秘的问题。我有一个JSliderJLabelJTextField。我希望它们都相邻对齐。我的问题是JTextField's (valueField) 上移了。当我打印出组件之间的 y 坐标值时,它们都是相同的。这是JLabelJTextField 的代码:

public SliderLabelPanel(String labelStr, String unitLabelStr)
//PRE:  labelStr is initialized  
//POST: a default SliderLabelPanel is created
{
    //this.setLayout(new FlowLayout());
    slider = new JSlider();
    slider.setMajorTickSpacing(10);
    slider.setMaximum(100);
    slider.setMinimum(0);
    slider.setPaintTicks(true);

    label = new JLabel(labelStr);
    valueField = new JTextField();
    unitLabel = new JLabel(unitLabelStr);

    this.add(slider);
    this.add(label);
    this.add(valueField);
    this.add(unitLabel);
    //printFields();
}

public void update()
//POST: this SliderLabelPanel is updated (size of the components)
{
    this.slider.setBounds(0, slider.getY(), (int)(Global.sliderWidth * getWidth()), (int)(Global.labelHeight * getHeight()));
    this.label.setBounds(slider.getX() + slider.getWidth(), slider.getY(), 
                        Global.LABEL_WIDTH, (int)(Global.labelHeight * getHeight()));

    this.valueField.setBounds(label.getX() + label.getWidth(), slider.getY(),
                             (int)(Global.fieldWidth * getWidth()), Global.FIELD_HEIGHT);

    //valueField.getx

    this.unitLabel.setBounds(valueField.getX() + valueField.getWidth(), slider.getY(),
                             Global.LABEL_WIDTH, (int)(Global.labelHeight * getHeight()));
    printFields();
}

public void paintComponent(Graphics g)
//PRE:  g is initialized
//POST: the components of this SliderLabelPanel are painted to g
{
    super.paintComponent(g);
}

JSlider 将与JLabel 对齐,但JTextField 将向上移动。也请给我建议,我的想法不多了。感谢大家的帮助!

【问题讨论】:

  • 您写的帖子和代码对我们来说几乎无法测试。请创建并发布一个可显示您的问题的小型可编译程序,该程序足够完整,可以为我们编译和运行,但又足够小,以便可以快速理解,sscce
  • 事实上,我之前已经向您发布了此建议,并在您最近的问题中向您展示了一个示例 SSCCE。请付出同样的努力来问你的问题,就像我在回答你的最后一个问题时已经投入的一样。要求不高。
  • 你为什么使用Absolute Positioning
  • @Hovercraft 满满的鳗鱼。好的,我会在查看其他解决方案后发布它。
  • @trashgod,你能给我一些建议吗?我使用的是 BorderLayout,它看起来很尴尬。缩放非常重要。

标签: java applet vertical-alignment jlabel jtextfield


【解决方案1】:

你能给我一些建议吗?

import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.JTextField;

/** @see http://stackoverflow.com/q/10867400/230513 */
public class LayoutTest extends JPanel {

    public LayoutTest() {
        super(new GridLayout(1, 0));
        JSlider slider = new JSlider();
        this.add(slider);
        JLabel label = new JLabel("Label", JLabel.CENTER);
        this.add(label);
        JTextField jtf = new JTextField("Text");
        this.add(jtf);
    }

    private void display() {
        JFrame f = new JFrame("LayoutTest");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(this);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new LayoutTest().display();
            }
        });
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-24
    • 1970-01-01
    • 2015-08-06
    • 2013-05-22
    • 2020-08-11
    • 2014-04-07
    • 1970-01-01
    相关资源
    最近更新 更多