【问题标题】:Java SWING: How to fix size of components in GridLayoutJava SWING:如何在 GridLayout 中修复组件的大小
【发布时间】:2017-05-16 07:16:50
【问题描述】:

我正在GridLayout 中创建一个简单的窗口,这是我的代码:

package com.company.app;

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


public class SpamGUI {

    public static void main(String[] args) {
        System.out.println("Loading Program..");
        JFrame frame = new JFrame("My awesome Program");
        frame.setVisible(true);
        frame.setSize(800, 200);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(0, 3));
        panel.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);

        JLabel lblTrainPath = new JLabel("Enter Training Folder Path");
        lblTrainPath.setSize(100,10);
        panel.add(lblTrainPath);

        JTextField txtTrainPath = new JTextField();
        txtTrainPath.setSize(100,10);
        panel.add(txtTrainPath);

        JButton btnTrainPath = new JButton("Select");
        panel.add(btnTrainPath);


        JLabel lblTrainPath3 = new JLabel("Enter Training3 Folder Path");
        panel.add(lblTrainPath3);

        JTextField txtTestPath = new JTextField();
        panel.add(txtTestPath);

        JButton btnTestPath = new JButton("Select");
        panel.add(btnTestPath);


        frame.add(panel);

    }
}

它会生成这样的屏幕:

如您所见,它不考虑组件的大小,在屏幕上显示的范围很广。此外,当我从 INtelliJ IDEA 运行程序时,除非我调整屏幕大小,否则它不会呈现组件。

我还想要一个具有自定义大小的组件的固定大小的窗口。

请指导

【问题讨论】:

  • “如您所见,它不考虑组件的大小,在屏幕上显示相当宽泛” 这是GridLayout 如果应用程序的一个功能。不需要,使用不同的布局(例如GridBagLayout)或使用流布局将每个组件包装在JPanel 中。 “另外,当我从 INtelliJ IDEA 运行程序时,除非我调整屏幕大小,否则它不会渲染组件。” setVisible(true) 应该最后完成。
  • @AndrewThompson 好的,我会看看 Gridbag 和 Flow Layout。说到能见度..我在第三行做..我还应该在哪里做?
  • "我还应该在哪里做?" ..应该在 last 完成(行,在添加所有组件并调用 pack() .)

标签: java swing layout-manager grid-layout


【解决方案1】:

Font 类允许您指定字体大小。

因此,要创建字体,您应该编写如下代码:

Font f = new Font("serif", Font.PLAIN, fontSize);

fontSize 参数将确定Font 的大小 所以,在这里输入你想要的字体大小..然后将字体实例变量f设置为JLabel实例变量,如下所示:

lblTrainPath.setFont(f);

以及用于具有自定义大小的组件。 你应该试试pack() 而不是frame.setSize(800,200) 并在将所有组件添加到框架后使用pack(),对于固定大小的窗口使用setResizable(false)...

【讨论】:

  • you should try pack() instead of frame.setSize(800,200) and use this pack() after adding all the components to your frame and for 你能澄清一下吗?
  • 1) new Font("serif", Font.PLAIN, fontSize); 避免使用'幻数,应该是new Font(Font.SERIF, Font.PLAIN, fontSize); 2) 使用字体大小并不能真正解决根本问题,它是强制所有单元格大小相同的布局。 3) 调用pack() 是个好主意,应该在调用setResizable(false) 之后完成
  • 不,我不认为这很重要,在 setResizable() 之前或之后调用 pack() bcz 我在 setResizable() 之前使用了 pack() 并且它正在工作
猜你喜欢
  • 2017-06-04
  • 2011-11-15
  • 2011-09-28
  • 2021-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-11
  • 1970-01-01
相关资源
最近更新 更多