0 0

java swing 多个JLabel和多个JTextField的对齐5

java swing   多个JLabel和多个JTextField的对齐,如下图所示,把JLabel都放在一个垂直的box1中,把JTextField放在另一个垂直的box2中,然后把box1和box2放在一个水平的boxA中。可是就如下图所示,文字和文本框对不齐。“初始信息素”、“迭代次数”、“蚂蚁数量”都太下了,“期望因子beta”和“信息素残留参数rho”都太上了。



可是如果把一行中的JLabel和JTextField添加在一个JPanel,然后再把所有的JPanel再添加在一个垂直的Box中的话,这样文本框JTextField之间就会对不齐,文字也对不齐。该怎么样处理呢?
2014年7月21日 20:26
  • 大小: 3.2 KB

2个答案 按时间排序 按投票排序

0 0

采纳的答案

这个可以借助SpringUtilities这个处理对齐问题

import javax.swing.*;
import javax.swing.SpringLayout;
import java.awt.*;


public class SpringUtilities {
  
    public static void printSizes(Component c) {
        System.out.println("minimumSize = " + c.getMinimumSize());
        System.out.println("preferredSize = " + c.getPreferredSize());
        System.out.println("maximumSize = " + c.getMaximumSize());
    }

    
    public static void makeGrid(Container parent,
                                int rows, int cols,
                                int initialX, int initialY,
                                int xPad, int yPad) {
        SpringLayout layout;
        try {
            layout = (SpringLayout)parent.getLayout();
        } catch (ClassCastException exc) {
            System.err.println("The first argument to makeGrid must use SpringLayout.");
            return;
        }

        Spring xPadSpring = Spring.constant(xPad);
        Spring yPadSpring = Spring.constant(yPad);
        Spring initialXSpring = Spring.constant(initialX);
        Spring initialYSpring = Spring.constant(initialY);
        int max = rows * cols;

 
        Spring maxWidthSpring = layout.getConstraints(parent.getComponent(0)).
                                    getWidth();
        Spring maxHeightSpring = layout.getConstraints(parent.getComponent(0)).
                                    getHeight();
        for (int i = 1; i < max; i++) {
            SpringLayout.Constraints cons = layout.getConstraints(
                                            parent.getComponent(i));

            maxWidthSpring = Spring.max(maxWidthSpring, cons.getWidth());
            maxHeightSpring = Spring.max(maxHeightSpring, cons.getHeight());
        }

        for (int i = 0; i < max; i++) {
            SpringLayout.Constraints cons = layout.getConstraints(
                                            parent.getComponent(i));

            cons.setWidth(maxWidthSpring);
            cons.setHeight(maxHeightSpring);
        }


        SpringLayout.Constraints lastCons = null;
        SpringLayout.Constraints lastRowCons = null;
        for (int i = 0; i < max; i++) {
            SpringLayout.Constraints cons = layout.getConstraints(
                                                 parent.getComponent(i));
            if (i % cols == 0) { //start of new row
                lastRowCons = lastCons;
                cons.setX(initialXSpring);
            } else { //x position depends on previous component
                cons.setX(Spring.sum(lastCons.getConstraint(SpringLayout.EAST),
                                     xPadSpring));
            }

            if (i / cols == 0) { //first row
                cons.setY(initialYSpring);
            } else { //y position depends on previous row
                cons.setY(Spring.sum(lastRowCons.getConstraint(SpringLayout.SOUTH),
                                     yPadSpring));
            }
            lastCons = cons;
        }

        SpringLayout.Constraints pCons = layout.getConstraints(parent);
        pCons.setConstraint(SpringLayout.SOUTH,
                            Spring.sum(
                                Spring.constant(yPad),
                                lastCons.getConstraint(SpringLayout.SOUTH)));
        pCons.setConstraint(SpringLayout.EAST,
                            Spring.sum(
                                Spring.constant(xPad),
                                lastCons.getConstraint(SpringLayout.EAST)));
    }

    /* Used by makeCompactGrid. */
    private static SpringLayout.Constraints getConstraintsForCell(
                                                int row, int col,
                                                Container parent,
                                                int cols) {
        SpringLayout layout = (SpringLayout) parent.getLayout();
        Component c = parent.getComponent(row * cols + col);
        return layout.getConstraints(c);
    }


    public static void makeCompactGrid(Container parent,
                                       int rows, int cols,
                                       int initialX, int initialY,
                                       int xPad, int yPad) {
        SpringLayout layout;
        try {
            layout = (SpringLayout)parent.getLayout();
        } catch (ClassCastException exc) {
            System.err.println("The first argument to makeCompactGrid must use SpringLayout.");
            return;
        }

        //Align all cells in each column and make them the same width.
        Spring x = Spring.constant(initialX);
        for (int c = 0; c < cols; c++) {
            Spring width = Spring.constant(0);
            for (int r = 0; r < rows; r++) {
                width = Spring.max(width,
                                   getConstraintsForCell(r, c, parent, cols).
                                       getWidth());
            }
            for (int r = 0; r < rows; r++) {
                SpringLayout.Constraints constraints =
                        getConstraintsForCell(r, c, parent, cols);
                constraints.setX(x);
                constraints.setWidth(width);
            }
            x = Spring.sum(x, Spring.sum(width, Spring.constant(xPad)));
        }

        //Align all cells in each row and make them the same height.
        Spring y = Spring.constant(initialY);
        for (int r = 0; r < rows; r++) {
            Spring height = Spring.constant(0);
            for (int c = 0; c < cols; c++) {
                height = Spring.max(height,
                                    getConstraintsForCell(r, c, parent, cols).
                                        getHeight());
            }
            for (int c = 0; c < cols; c++) {
                SpringLayout.Constraints constraints =
                        getConstraintsForCell(r, c, parent, cols);
                constraints.setY(y);
                constraints.setHeight(height);
            }
            y = Spring.sum(y, Spring.sum(height, Spring.constant(yPad)));
        }

        //Set the parent's size.
        SpringLayout.Constraints pCons = layout.getConstraints(parent);
        pCons.setConstraint(SpringLayout.SOUTH, y);
        pCons.setConstraint(SpringLayout.EAST, x);
    }
}


具体用法
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SpringLayout;

public class App {
	private static void createAndShowGUI() {
		String[] labels = { "姓名: ", "密码: ", "Email: ", "地址: " };
		int numPairs = labels.length;

		JPanel p = new JPanel(new SpringLayout());
		for (int i = 0; i < numPairs; i++) {
			JLabel l = new JLabel(labels[i], JLabel.TRAILING);
			p.add(l);
			JTextField textField = new JTextField(10);
			l.setLabelFor(textField);
			p.add(textField);
		}

		SpringUtilities.makeCompactGrid(p, numPairs, 2,
				6, 6, 
				6, 6); 

		JFrame frame = new JFrame("SpringForm");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		p.setOpaque(true); 
		frame.setContentPane(p);

		frame.pack();
		frame.setVisible(true);
	}

	public static void main(String[] args) {
		javax.swing.SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				createAndShowGUI();
			}
		});
	}
}

2014年7月21日 20:55
0 0

设置layout为null   指定对象宽度,采用绝对定位画出来的界面要好看些

2014年7月21日 21:56

相关推荐

    Java Swing组件布局管理器之FlowLayout(流式布局)入门教程

    Java Swing 组件布局管理器之 ...这个示例代码中,我们创建了一个 JFrame,并在其中添加了多个组件,包括 JComboBox、JTextField 等。我们使用 FlowLayout 来布局这些组件,并设置了对齐方式、水平间隙和垂直间隙。

    Java Swing图形界面

    Java Swing是Java平台上用于构建图形用户界面(GUI)的一个强大工具包,它是Java Foundation Classes (JFC)的一部分。Swing提供了丰富的组件集,允许开发者创建功能完备、交互性强的桌面应用。本篇将深入探讨Java ...

    java swing权威指南

    - **基本组件**:包括 JButton、JTextField、JLabel 等简单控件,以及 JList、JTable、JTree 等复杂数据展示组件。 - **高级组件**:如 JProgressBar、JTabbedPane、JSlider 等,它们提供了更为丰富和复杂的交互...

    java swing编程 标签内容详细联系

    Java Swing是Java GUI(图形用户界面)开发的一个重要组件,它是Java AWT(Abstract Window Toolkit)的扩展,提供了更为丰富的用户界面元素和更多的定制功能。Swing库是完全由Java编写,因此它具有平台无关性,可以...

    java swing 入门教程

    Java Swing 是Java平台上的图形用户界面(GUI)工具包,它是Java AWT(Abstract Window Toolkit)的扩展,提供了更为丰富的组件和功能。本篇入门教程将带你了解Swing的基础知识,帮助你快速掌握如何使用Swing构建...

    JAVA swing类例子

    4. **JTabbedPaneDemo.java**:`JTabbedPane`组件允许在多个面板之间切换,每个面板代表一个“标签”或“选项卡”。此示例可能包含如何添加、删除和管理这些选项卡,以及如何设置自定义图标和标题。 5. **...

    Java Swing图形界面开发与案例详解

    Swing提供了丰富的组件库,如按钮(JButton)、文本框(JTextField)、标签(JLabel)、面板(JPanel)、滚动窗格(JScrollPane)、菜单(JMenu和 JMenuItem)等。这些组件为构建用户界面提供了基础元素,开发者...

    java Swing(容器,简单控件,布局管理器)

    ### Java Swing 概述 Java Swing 是 Java 平台中用于构建图形用户界面(GUI)的一个强大库。它是在 Java 2.0 版本中引入的,作为对...随着 Java 的不断更新和发展,Swing 也在持续进化,为开发者提供了更多的可能性。

    java 如何使用BoxLayout布局管理器

    在Java Swing中,布局管理器是负责控制组件在容器中排列和放置的关键工具。Box Layout是其中的一种布局管理器,它允许开发者按照线性顺序(水平或垂直)来组织组件。本篇文章将深入探讨如何在Java中有效地使用...

    JAVA教学(关于swing的使用)

    以上示例展示了如何使用Swing中的`ImageIcon`和`JLabel`来创建一个带有图标和文本的标签,并将其添加到窗口中显示。 #### 五、总结 Swing为Java开发者提供了一套丰富的GUI工具箱,不仅简化了GUI应用程序的开发过程...

    javaswing教程[收集].pdf

    `JComponent`提供了绘制、键盘处理和组件添加的基础,允许开发者创建自定义组件或使用内置的组件,如`JButton`、`JLabel`、`JTextField`等。通过`add()`方法,可以将一个Swing组件添加到另一个组件上,实现组件的...

    Java-Swing控件实例代码

    本资源包含了一系列Java Swing控件的实例代码,非常适合初学者深入理解和实践。 1. **Swing组件基础**: - JFrame:这是Swing应用程序的主要容器,通常作为窗口的基础。 - JPanel:用于添加和组织其他组件,可以...

    java swing 编写的。。。。。

    Java Swing 是Java平台上用于构建图形用户界面(GUI)的一个库,它是Java Foundation Classes (JFC)的一部分。Swing提供了一套丰富的组件,如按钮、文本框、菜单等,用于创建功能丰富的桌面应用程序。在本教程中,...

    java swing 教程

    - **文本组件**:Swing的文本组件如`JTextField`和`JTextArea`处理用户输入的文本数据。 - **音量控制**:虽然Swing在音频控制方面的能力有限,但它可以与其他Java库结合使用,如Java Sound API,来实现更全面的功能...

    JAVA Swing容器

    Swing 是 Java 的一個GUI 组件库,提供了許多实用的组件,可以用来构建复杂的图形用户界面。 JComponent JComponent 是一个抽象类,用于定义所有子类组件的一般方法。所有的 Swing 组件都是 JComponent 的子类。...

    swing java

    JLabel有三个对齐方式:LEFT、CENTER和RIGHT,你可以通过第三个构造参数来设置。 **3. JButton按钮** JButton用于接收用户的点击操作。你可以创建一个JButton并传入按钮的显示文本。按钮上的事件处理通常通过添加...

    Java编程技术课件:08Swing UI编程(6学时).pptx

    Swing组件包括但不限于JButton、JLabel、JTextField、JTextArea等,它们都有各自的属性和方法来定制外观和行为。通过组合这些组件和布局管理器,开发者可以构建出各种复杂且用户友好的界面。同时,Swing还提供了事件...

    推荐课程 完整版优质java教程 java精品教学课件 Java语言程序设计 第12章 swing 组件(共59页).ppt

    `Thread`类和`Runnable`接口是Java多线程的基础,Swing还提供了`SwingWorker`类,方便在后台执行计算任务并更新UI。 6. 数据库编程 Java提供了JDBC(Java Database Connectivity)API,使得Java程序能与各种数据库...

    swing 一个简单布局

    通常,一个 Swing 应用程序会包含 JFrames、JPanels 和各种 JComponents,如 JButton、JLabel、JTextField 等。这些组件需要放入某种布局中,以便在窗口中正确显示。 在创建自定义布局时,开发者可能会遇到以下几个...

Global site tag (gtag.js) - Google Analytics