1

我有个问题。

我有以下程序,但我在一件事上遇到了麻烦。我已经创建了一个网格布局,并且我正在使用 JPanel 在网格中输入按钮和文本,但是如果我的文本很长,一切似乎都会改变大小。有人可以帮助我如何防止这种情况发生吗?

这是我的代码:

package JFrameTester;

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



public class JFrameTester {


public JPanel createContentPane (){

        JPanel panel = new JPanel();
        JButton button1,button2,button3,button4;

        JPanel mainPanel = new JPanel(new GridLayout(2, 0, 40, 10));

        //JPanel red = createSquareJPanel(Color.red, 50);
        button1 =  new JButton ("button1");
        button2 =  new JButton ("button2");
        button3 =  new JButton ("button3");
        button4 =  new JButton ("button4");
        Label one   = new Label("Rohihtjthjhtjghjghmgfjgjghjghj");
        //add(button1);


        mainPanel.add(button1);
        mainPanel.add(one);
        mainPanel.add(button2);
        mainPanel.add(button3);
        mainPanel.add(button4);


        panel.add(mainPanel);
        panel.setOpaque(true);
        return panel;
    }


    public static void main(String[] args) {

        JFrame frame = new JFrame("GridLayout");
        JFrameTester Display = new JFrameTester();
        frame.setContentPane(Display.createContentPane());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);


 }
}
4

3 回答 3

4

这就是布局管理器所做的;他们为每个组件分配足够的空间。您可以尝试将 HTML 嵌入到JLabel实例中以便包装。否则,您将不得不忍受它。

同样重要的是要注意JPanel实例默认情况下是不透明的。

于 2011-11-30T19:16:39.750 回答
1

嗯...首先要做的事情。您要声明GridLayout2 行 0 列。这正是你想要的吗?我想不是。

下一部分是您添加内容的地方。网格通常保持动态大小。它会将单元格缩小到尽可能小的值。但是当一些内容变大(大jPanels文本)时,它会扩大单元格。

根据单元格的内容,它们将保持静态或尝试填充所有可用空间。

如果我正确地阅读了您的问题,您需要做的是通过使用JComponents See JavaDoc link here的函数为您的 JButtons 设置静态大小。您可能希望使用setMaximumSize(new Dimension(width,height));每个按钮。

说得通?

在旁注中。如果您想更好地控制布局,请使用GrabBagLayout. 更多的工作,但更多的控制。

于 2011-11-30T19:19:15.970 回答
0

这是一篇较旧的帖子,但我在搜索同一问题时偶然发现了这一点。frame.pack() 的使用用于移动所有内容以适应给定的面板尺寸。因此,如果您增加一个事物的大小,其他事物就会缩小并四处移动以适应面板。

来源:http ://www.macs.hw.ac.uk/guidebook/?name=JFrame&page=2

于 2014-01-18T01:10:24.683 回答