-
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
2个答案 按时间排序 按投票排序
-
采纳的答案
这个可以借助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
相关推荐
Java Swing 组件布局管理器之 ...这个示例代码中,我们创建了一个 JFrame,并在其中添加了多个组件,包括 JComboBox、JTextField 等。我们使用 FlowLayout 来布局这些组件,并设置了对齐方式、水平间隙和垂直间隙。
Java Swing是Java平台上用于构建图形用户界面(GUI)的一个强大工具包,它是Java Foundation Classes (JFC)的一部分。Swing提供了丰富的组件集,允许开发者创建功能完备、交互性强的桌面应用。本篇将深入探讨Java ...
- **基本组件**:包括 JButton、JTextField、JLabel 等简单控件,以及 JList、JTable、JTree 等复杂数据展示组件。 - **高级组件**:如 JProgressBar、JTabbedPane、JSlider 等,它们提供了更为丰富和复杂的交互...
Java Swing是Java GUI(图形用户界面)开发的一个重要组件,它是Java AWT(Abstract Window Toolkit)的扩展,提供了更为丰富的用户界面元素和更多的定制功能。Swing库是完全由Java编写,因此它具有平台无关性,可以...
Java Swing 是Java平台上的图形用户界面(GUI)工具包,它是Java AWT(Abstract Window Toolkit)的扩展,提供了更为丰富的组件和功能。本篇入门教程将带你了解Swing的基础知识,帮助你快速掌握如何使用Swing构建...
4. **JTabbedPaneDemo.java**:`JTabbedPane`组件允许在多个面板之间切换,每个面板代表一个“标签”或“选项卡”。此示例可能包含如何添加、删除和管理这些选项卡,以及如何设置自定义图标和标题。 5. **...
Swing提供了丰富的组件库,如按钮(JButton)、文本框(JTextField)、标签(JLabel)、面板(JPanel)、滚动窗格(JScrollPane)、菜单(JMenu和 JMenuItem)等。这些组件为构建用户界面提供了基础元素,开发者...
### Java Swing 概述 Java Swing 是 Java 平台中用于构建图形用户界面(GUI)的一个强大库。它是在 Java 2.0 版本中引入的,作为对...随着 Java 的不断更新和发展,Swing 也在持续进化,为开发者提供了更多的可能性。
在Java Swing中,布局管理器是负责控制组件在容器中排列和放置的关键工具。Box Layout是其中的一种布局管理器,它允许开发者按照线性顺序(水平或垂直)来组织组件。本篇文章将深入探讨如何在Java中有效地使用...
以上示例展示了如何使用Swing中的`ImageIcon`和`JLabel`来创建一个带有图标和文本的标签,并将其添加到窗口中显示。 #### 五、总结 Swing为Java开发者提供了一套丰富的GUI工具箱,不仅简化了GUI应用程序的开发过程...
`JComponent`提供了绘制、键盘处理和组件添加的基础,允许开发者创建自定义组件或使用内置的组件,如`JButton`、`JLabel`、`JTextField`等。通过`add()`方法,可以将一个Swing组件添加到另一个组件上,实现组件的...
本资源包含了一系列Java Swing控件的实例代码,非常适合初学者深入理解和实践。 1. **Swing组件基础**: - JFrame:这是Swing应用程序的主要容器,通常作为窗口的基础。 - JPanel:用于添加和组织其他组件,可以...
Java Swing 是Java平台上用于构建图形用户界面(GUI)的一个库,它是Java Foundation Classes (JFC)的一部分。Swing提供了一套丰富的组件,如按钮、文本框、菜单等,用于创建功能丰富的桌面应用程序。在本教程中,...
- **文本组件**:Swing的文本组件如`JTextField`和`JTextArea`处理用户输入的文本数据。 - **音量控制**:虽然Swing在音频控制方面的能力有限,但它可以与其他Java库结合使用,如Java Sound API,来实现更全面的功能...
Swing 是 Java 的一個GUI 组件库,提供了許多实用的组件,可以用来构建复杂的图形用户界面。 JComponent JComponent 是一个抽象类,用于定义所有子类组件的一般方法。所有的 Swing 组件都是 JComponent 的子类。...
JLabel有三个对齐方式:LEFT、CENTER和RIGHT,你可以通过第三个构造参数来设置。 **3. JButton按钮** JButton用于接收用户的点击操作。你可以创建一个JButton并传入按钮的显示文本。按钮上的事件处理通常通过添加...
Swing组件包括但不限于JButton、JLabel、JTextField、JTextArea等,它们都有各自的属性和方法来定制外观和行为。通过组合这些组件和布局管理器,开发者可以构建出各种复杂且用户友好的界面。同时,Swing还提供了事件...
`Thread`类和`Runnable`接口是Java多线程的基础,Swing还提供了`SwingWorker`类,方便在后台执行计算任务并更新UI。 6. 数据库编程 Java提供了JDBC(Java Database Connectivity)API,使得Java程序能与各种数据库...
通常,一个 Swing 应用程序会包含 JFrames、JPanels 和各种 JComponents,如 JButton、JLabel、JTextField 等。这些组件需要放入某种布局中,以便在窗口中正确显示。 在创建自定义布局时,开发者可能会遇到以下几个...