有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaSwingGUI创建

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

  1. 第一行中的标签(仅一个标签)
  2. 从第二行开始需要添加100个按钮,这些按钮延伸到多行(宽度不应超过可见屏幕)
  3. 在新行中,再添加一个标签
  4. 从下一行开始,说100个按钮,延伸到多行(宽度不应超过可见屏幕)
  5. [可选]如果组件超过JFrame高度,则需要滚动到主窗口(仅垂直)

我有一个奇怪的结果流布局,有时它坚持可见的宽度,有时它甚至设置了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);

此处,panel1显示在屏幕可见部分之外的单格行中

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


共 (3) 个答案

  1. # 1 楼答案

    虽然这不是“好”问题的标准,但我自己也没有任何问题。有些人只能处理代码。我建议,如果您要发布代码,那么您可以不厌其烦地发布将编译、运行和演示您的情况的代码。这真的能帮助我们这些人了解你所看到的和你想要做的

    你谈论“行”;请注意,行和列是用于GridLayout和GridBagLayout之类的术语,但我认为它们不适合您所描述的内容

    在你的描述中,你没有说你想要滚动什么。看起来您希望整个UI都滚动,我现在假设是这样

    我会尝试一个带有BoxLayout的JPanel,垂直定向,用于整个主UI。您将在其中添加一些内容:

    第一个JPanel

    另一个JPanel,设置了FlowLayout,持有第一组按钮

    另一个JPanel和下一个JLabel

    还有第四个JPanel,设置了FlowLayout,并持有第二组按钮

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

    如果不运行代码,我无法解释为什么有时会出现奇怪的行为

  2. # 2 楼答案

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

    此外,这个问题实际上不是堆栈溢出的问题。问你问题的一个好方法是发布你的代码,告诉我们它有什么问题,应该做什么

  3. # 3 楼答案

    正如在前面的评论中所说,使用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));