首页 > 解决方案 > swing JAVA中的简单窗口

问题描述

任务:使用 JAVA swing 制作与以下屏幕截图相同的窗口:

https://i.stack.imgur.com/XWiFq.png

我做了什么:

结果如下:

https://i.stack.imgur.com/PqoH5.png

我尝试使用其他布局,但仍然无法正常工作。我附上代码。

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

public class MyJFrame extends JFrame {

    JPanel pan1 = new JPanel();
    JPanel pan2 = new JPanel();
    JPanel pan3 = new JPanel();
    JPanel pan4 = new JPanel();
    JPanel pan5 = new JPanel();
    JPanel pan6 = new JPanel();

    JButton jButton1 = new JButton("FR");
    JButton jButton2 = new JButton("FG");
    JButton jButton3 = new JButton("FB");
    JButton jButton4 = new JButton("A");
    JButton jButton5 = new JButton("B");
    JButton jButton6 = new JButton("C");

    public MyJFrame(){

        super("Simple Swing App");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocation(650,300);
        setLayout(new GridLayout(3,2));
        setResizable(true);



        JScrollPane scrollPane = new JScrollPane();

        jButton1.setBackground(Color.red);
        jButton2.setBackground(Color.green);
        jButton3.setBackground(Color.blue);

        pan1.setLayout(new GridLayout(1,3,2,2));
        pan2.setLayout(new GridLayout(1,3,2,2));
        pan3.setLayout(new BorderLayout());
        pan4.setLayout(new GridLayout(3,3,2,2));
        pan5.setLayout(new GridLayout(3,1,1,1));
        pan6.setLayout(new BorderLayout());

        pan1.add(jButton1);
        pan1.add(jButton2);
        pan1.add(jButton3);

        pan2.add(jButton4);
        pan2.add(jButton5);
        pan2.add(jButton6);

        pan3.add(pan1, BorderLayout.WEST);
        pan3.add(pan2, BorderLayout.EAST);

        for (int i=1; i<10; i++) {
            JButton jButton = new JButton(i+"");
            pan4.add(jButton);
        }

        for (int i=1; i<4; i++){
            JTextField jTextField = new JTextField(" Pole tekstowe " + i + " typu jTextField ");
            jTextField.setBackground(Color.WHITE);
            jTextField.setBorder(BorderFactory.createLineBorder(Color.CYAN));
            pan5.add(jTextField);
        }

        pan6.add(pan4, BorderLayout.WEST);
        pan6.add(pan5, BorderLayout.EAST);

        add(pan3);
        add(scrollPane);
        add(pan6);



        setSize(700,450);
        setVisible(true);
    }
}

标签: javaswinguser-interfacelayout-manager

解决方案


如果问题是“如何制作这个 GUI?” 我会使用这种方法:

  • 3 x BorderLayout红色)- 一个用于整个 GUI,一个用于主 GUI 面板的PAGE_STARTPAGE_END约束。
  • 在 中使用的面板中PAGE_START,2 x FlowLayout绿色),一个在 中LINE_START,另一个在 中LINE_END。(1)
  • 在面板中PAGE_END,2 x GridLayout蓝色),第一个是 3 x 3,另一个是单列。

在此处输入图像描述

  1. 如果顶部的组件(左右按钮组)需要完全相同的大小,也可以为它们使用网格布局。

推荐阅读