Java swing GUI创建

时间:2014-02-15 13:58:29

标签: java

我正在开发Java GUI,我需要:

  1. 第一行中的标签(仅一个标签)。
  2. 开始第二行需要添加说100个按钮,这些按钮延伸到多行(宽度不应超出可见屏幕)
  3. 在新行中添加一个标签
  4. 从下一行开始说100个按钮延伸到多行(宽度不应超出可见屏幕)......
  5. [可选]如果组件超出JFrame高度,则需要滚动设备到主窗口(仅垂直)
  6. 我的流程布局有一个奇怪的结果,有时它会粘在可见的宽度上,有时甚至会在一行中设置500个按钮。

    我已尝试过每个布局和多个窗格。仍然没有运气。

    请指导.. 只需要一个想法,不需要代码

    更新了代码:很抱歉,这是我对 stackoverflow

    的第一个问题

    感谢您及时回复 事实上我尝试了很多,这是一个简单的。

                setLayout(new FlowLayout());
        setTitle("JAVA GUI");
        setSize(500,500);
        setVisible(true);       
        add(new JLabel("row 1"));
        JPanel panel1 = new JPanel(new FlowLayout());
        for(int i=0;i<200;i++){     
            panel1.add(new JButton("b"+i));         
        }
        add(panel1);
    

    这里面板1出现在一个超出屏幕可见部分的单个行中。

    我认为这可以通过将maximumsize设置为Jframe来解决,但不知道如何将其大小设置为FULL SCREEN。

3 个答案:

答案 0 :(得分:0)

您可以尝试MigLayout。 http://www.miglayout.com/

此问题也不是堆栈溢出的问题。提出问题的一个好方法是发布你的代码并告诉我们它有什么问题以及它应该做什么。

答案 1 :(得分:0)

虽然这不是'好'stackOverflow问题的常态,但我自己也没有任何问题。有些人无法处理除代码之外的任何事情。我建议,如果您要发布代码,那么您就会麻烦地发布编译,运行和演示您的情况的代码。这真的有助于我们这里的人了解你所看到的以及你想要做的事情。

你谈论“行”;请注意,行和列是与GridLayout和GridBagLayout等术语一起使用的术语,但我不认为它们适合您描述的内容。

在您的说明中,您没有说出要滚动的内容。看起来你想要滚动整个UI,我现在假设它。

我会尝试使用BoxLayout的JPanel,垂直定向,用于整个主UI。你会在其中加入一些东西:

第一个JPanel。

使用FlowLayout设置的另一个JPanel,持有第一组按钮。

另一个带有下一个JLabel的JPanel

第四个JPanel,使用FlowLayout设置,持有第二组按钮。

现在,我将顶级面板放入JScrollPane,然后将其放入Frame的CENTER部分(使用其默认的BorderLayout),看看会发生什么。说实话,我不确定,但这些都是我要开始的事情。

我不知道,如果没有运行代码,为什么有时会出现奇怪的行为。

答案 2 :(得分:0)

正如之前的评论中所述,使用ContentPane是可行的方法。以下是您想要的工作示例:

public class Test {

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setTitle("JAVA GUI");

        JPanel panel1 = new JPanel();
        panel1.setLayout(new BoxLayout(panel1, BoxLayout.Y_AXIS));

        int nbLines = 10;

        for (int i = 0; i < nbLines; i++) {
            JPanel linePanel = new JPanel(new FlowLayout());
            linePanel.add(new JLabel("row " + i));
            for(int j = 0; j < 50; j++) {
                 linePanel.add(new JButton("b" + j));
            }

            panel1.add(linePanel);
        }

        frame.setContentPane(panel1);

        //frame.setSize(500, 500);
        frame.setExtendedState(frame.getExtendedState() | JFrame.MAXIMIZED_BOTH);
        frame.pack();
        frame.setVisible(true);
    }
}

这就是我得到的:

Here is what I get

如果您想使用左对齐按钮,可以使用:

JPanel linePanel = new JPanel(new FlowLayout(FlowLayout.LEFT));