-1

在过去两天的最后几个小时里,我一直在试图弄清楚为什么我的 GUI 不能正常工作。这是我来到你们所有人的地方,看看你们是否能帮助我。

现在我想做的是一个基于文本的游戏,简单吧?好吧,我想使用排列在屏幕左侧的按钮,底部是你的健康和所有有趣的东西,游戏的主要内容,文本,在中间,但不管我做了什么无法让它适合,然后我偶然发现了 pack() 所以我试了一下,是的......它做了它应该做的事情,遗憾的是现在我只有一个词而且屏幕很小,任何想法至于我怎样才能使屏幕更大,并保持大?

将要编辑这个并扔给你我的代码的点点滴滴,包括 textarea (请注意,我在不工作的时候已经使用 java 了两天)

  JTextArea textarea = new JTextArea("example");

    frame.add(textarea);
    //frame.pack();

在这里我已经打包注释掉了,因为我正在玩它。

大家还有什么想看的吗?

4

3 回答 3

1

有很多事情可能会出错,如果没有更多代码,很难找出确切的问题......

有几件事突然想到...

  • 使用适当的布局管理器,甚至是复合布局管理器
  • 向 提供附加信息以JTextArea允许其定义可用空间,例如行和列
  • 添加JTextArea到 aJScrollPane以确保它不会突然占用更多空间然后实际可用

在此处输入图像描述

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class TestLayout21 {

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

    public TestLayout21() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
            setLayout(new BorderLayout());

            JPanel actions = new JPanel(new GridBagLayout());
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridwidth = GridBagConstraints.REMAINDER;
            gbc.fill= GridBagConstraints.HORIZONTAL;

            actions.add(new JButton("Walk"), gbc);
            actions.add(new JButton("Run"), gbc);
            actions.add(new JButton("Jump"), gbc);
            actions.add(new JButton("Eat"), gbc);
            actions.add(new JButton("Drink"), gbc);

            add(actions, BorderLayout.WEST);
            add(new JProgressBar(), BorderLayout.SOUTH);

            JTextArea textArea = new JTextArea(20, 40);
            add(new JScrollPane(textArea));

        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(200, 200);
        }
    }

}
于 2013-03-20T07:47:23.300 回答
0

Pack 确实只会使您的框架或面板只需要适合其中的组件即可。尝试preferredSize() 方法,如果它仍然不起作用,可能会发布一些代码。

于 2013-03-20T07:30:23.040 回答
0

您可以尝试在对象或面板/框架本身上设置首选尺寸:

myPanel.preferredSize(new Dimension(1000,500));

或者

myFrame.preferredSize(new Dimension(1000,500));

或者

myTextArea.preferredSize(new Dimension(300,200));
于 2013-03-20T07:22:00.597 回答