java - JButton 忽略指示的大小

标签 java swing awt

我是 Swing 新手。我正在尝试创建一个 800x600 的窗口,它将分为两个相等的部分 (800x300):第一个是不可变的文本区域,第二个是 - 按钮。

问题: 按钮应该占据窗口的下半部分。但是按钮大小似乎不正确。

代码:

import javax.swing.*;
import javax.xml.parsers.ParserConfigurationException;
import java.awt.*;
import java.io.IOException;
import java.util.Collections;
import java.util.List;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Main {

    public static void main(String[] args) throws ParserConfigurationException, IOException, SAXException {
        JFrame.setDefaultLookAndFeelDecorated(true);
        final JFrame frame = new JFrame("Lingvo frame");
        frame.setPreferredSize(new Dimension(800, 600));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel(new GridLayout(4,4,4,4));
        final JButton showResultButton = new JButton();
        showResultButton.setPreferredSize(new Dimension(800, 300));
        showResultButton.setHorizontalAlignment(SwingConstants.CENTER);
        showResultButton.setVerticalAlignment(SwingConstants.BOTTOM);

        frame.add(panel);
        panel.add(showResultButton);

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

        showResultButton.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent arg0) {
                showResultButton.setText("translation");
            }
        });
    }
} 

最佳答案

只需将您的框架设置为 GridLayout。另请注意,只需使用此构造函数 JtextArea(rows, columns) 设置 JTextArea 的大小,并仅设置 pack() 您的框架。无需将大小设置为任何内容。 GridLayout 将根据 JTextArea

的大小为您处理 JButton 的大小

此外,Swing 应用程序应该从事件调度线程运行。参见 Initial Threads .

另见 Laying out Components within a Container了解有关布局管理器的更多信息。

这是一个运行示例

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Main {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JFrame.setDefaultLookAndFeelDecorated(true);
                final JFrame frame = new JFrame("Lingvo frame");

                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                final JButton showResultButton = new JButton();
                final JTextArea textArea = new JTextArea(20, 60);

                frame.setLayout(new GridLayout(2, 1));
                frame.add(textArea);
                frame.add(showResultButton);

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

                showResultButton.addActionListener(new ActionListener() {

                    public void actionPerformed(ActionEvent arg0) {
                        showResultButton.setText("translation");
                    }
                });
            }
        });
    }
}

关于java - JButton 忽略指示的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21708380/

相关文章:

java - 如何使 JLayeredPane() 和 JPanel() 透明?它总是显示 super 窗口的背景

Java 监听器不工作,除非我按 Enter 键,如何在文本框更改后使其工作

java - 有时必须等待很长时间,直到 HttpClient.execute() 抛出异常

java - Junit - Mockito - 如何正确设置模拟对象

java - 通过 java 程序执行命令时如何为命令提示符编写/提供输入

java - 需要在同一框架/面板中的现有绘图之上添加绘图

java - web.xml中的Java错误页面不适用于所有请求

java - 单击按钮时显示覆盖层,并在使用 Swing 执行操作时再次消失

java - 如何自定义(更改)JEditorPane 边框?

java - Java 图形元素在屏幕上的确切位置?