【问题标题】:JButton alignment in JFrameJFrame中的JButton对齐
【发布时间】:2012-02-21 19:07:07
【问题描述】:

我正在使用 Java 中的 JFrame 制作一个猪拉丁语翻译器。这是我的问题;我有一个关闭程序的“退出”按钮;没关系,但我无法控制它的对齐方式(或任何其他组件)。我尝试使用quit.setAlignmentY(BOTTOM_ALIGNMENT);,希望它可以与页面底部对齐,但没有任何改变。请在这里帮忙? 如果有人需要,这里是代码;

    public class Main extends JFrame{  
        private static JLabel label, result;  
        private static JTextField english;  
        private static JButton quit;  
        private static String originalResult = "Translated to pig latin: ";  
        private static ArrayList<String> beginningSymbols = new ArrayList<>();  
        private static ArrayList<String> endingSymbols = new ArrayList<>();  
        //prompt for string to translate, display final result  
        public Main(){  
            super("Pig Latin Translator");  
            setLayout(new FlowLayout());  
            setVisible(true);  
            setSize(600, 300);  
            setDefaultCloseOperation(EXIT_ON_CLOSE);    
            translatingHandler th = new translatingHandler();  
            label = new JLabel("Enter a phrase to translate into pig latin, then press enter:");  
            english = new JTextField(15);  
            result = new JLabel(originalResult);  
            quit = new JButton("Quit program");  
            english.addActionListener(th);  
            quit.addActionListener(th);  
            quit.setAlignmentY(BOTTOM_ALIGNMENT);  
            add(label);  
            add(english);  
            add(quit);  
            add(result);  
            english.requestFocus();  
        }  

        public static void main(String[] args){  
            new Main();  
        }
...
}

JButton 退出是我试图与页面底部对齐的那个。谢谢!

【问题讨论】:

  • 解决方案:阅读tutorials on use of layout managers 并开始使用它们。 FlowLayout 适用于一些简单的事情,但您需要使用其他一些来解决这个问题,可能使用自己的布局管理器嵌套 JPanel。例如,BorderLayout 可用于将 JPanel 放置在 GUI 的底部位置,您可以将退出 JButton 放置在底部 JPanel 中。

标签: java swing user-interface alignment jframe


【解决方案1】:

实际上你使用的是FlowLayout。如果你看一下FlowLayout tutorials,就会提到

FlowLayout 类将组件排成一排,按其大小设置 首选尺寸。如果容器中的水平空间太小 要将所有组件放在一行中,FlowLayout 类使用 多行。如果容器比一排所需的宽 组件,默认情况下,该行在 容器。

如果你坚持使用 FlowLayout 对齐你的组件。

随便看看Using Layout Managers。对于您的任务,适当的布局管理器将是 BorderLayout。

但如果您需要一些非常灵活的东西,请使用GridBagLayout 或MigLayout,但它们使用起来有点复杂。

所以正如@HovercraftFullOfEels 建议的那样,尽量避开它们。

【讨论】:

  • 如果可以,最好避免使用 GridBagLayout,并且只有在必须时才使用它。最好在嵌套的 JPanel 中使用更简单的布局管理器。
  • @HovercraftFullOfEels:除了它的复杂性之外,任何避免它的具体原因。
  • 主要是因为它的复杂性,特别是对于新手使用布局管理器。大多数复杂的布局都可以使用嵌套组件进行。 MigLayout 也是比 Gridbaglayout 更好的网格创建器。
【解决方案2】:

欢迎来到令人困惑的 Java Swing 世界。您可能想研究布局管理器。具体来说,BorderLayout 可能会引起您的兴趣。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 2011-03-08
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 2013-11-21
    • 2012-10-13
    相关资源
    最近更新 更多