程序猿小河 2021-10-27 10:02 采纳率: 100%
浏览 15
已结题

swing组件问题,组件的排列方式错误

一共有三个组件,一个搜索框,一个搜索按钮,一个展示用的表格,搜索框和按钮在一行,展示用的表格在下一行。
问题:如何在保证能自由修改窗口大小的情况下,使得这三个组件排列正常

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

public class Main {

    JTextField bookSearchKey = new JTextField("");
    JButton bookSearch = new JButton("图书搜索");
    String[] bookTableHeader = {"序号", "书籍名称", "书籍大小", "书籍位置", "书籍下载"};
    Object[][] bookTableBody = {
            {"1", "西游记》", "100MB", "D:\\book", "下载"},
            {"2", "西游记》", "100MB", "D:\\book", "下载"},
            {"3", "西游记》", "100MB", "D:\\book", "下载"},
            {"4", "西游记》", "100MB", "D:\\book", "下载"},
            {"5", "西游记》", "100MB", "D:\\book", "下载"}
    };
    JTable bookTable = new JTable(bookTableBody, bookTableHeader);

    public static void main(String[] args) {
        JFrame jf = new JFrame("测试窗口");
        jf.setPreferredSize(new Dimension(800, 800));
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        Main main = new Main();
        Box panel1 = main.createPanel1();
        jf.setContentPane(panel1);
        jf.pack();
        jf.setLocationRelativeTo(null);
        jf.setVisible(true);
    }

    private Box createPanel1() {
        Box box = Box.createVerticalBox();
        JScrollPane jScrollPane=  new JScrollPane(this.bookTable);
        JPanel search = new JPanel();
        search.setLayout(null);
        this.bookSearchKey.setBounds(10, 10, 500, 30);
        this.bookSearch.setBounds(520, 11, 250, 28);
        search.add(this.bookSearchKey);
        search.add(this.bookSearch);
        box.add(search);
        box.add(jScrollPane);
        return box;
    }
}

运行结果如下:

img

两个panel之间会有一个间隙

查看问题之后发现是

 jf.setPreferredSize(new Dimension(800, 800));

这行代码的问题

经过修改之后:

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

public class Main {

    JTextField bookSearchKey = new JTextField("");
    JButton bookSearch = new JButton("图书搜索");
    String[] bookTableHeader = {"序号", "书籍名称", "书籍大小", "书籍位置", "书籍下载"};
    Object[][] bookTableBody = {
            {"1", "西游记》", "100MB", "D:\\book", "下载"},
            {"2", "西游记》", "100MB", "D:\\book", "下载"},
            {"3", "西游记》", "100MB", "D:\\book", "下载"},
            {"4", "西游记》", "100MB", "D:\\book", "下载"},
            {"5", "西游记》", "100MB", "D:\\book", "下载"}
    };
    JTable bookTable = new JTable(bookTableBody, bookTableHeader);

    public static void main(String[] args) {
        JFrame jf = new JFrame("测试窗口");
//        jf.setPreferredSize(new Dimension(800, 800));
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        Main main = new Main();
        Box panel1 = main.createPanel1();
        jf.setContentPane(panel1);
        jf.pack();
        jf.setLocationRelativeTo(null);
        jf.setVisible(true);
    }

    private Box createPanel1() {
        Box box = Box.createVerticalBox();
        JScrollPane jScrollPane=  new JScrollPane(this.bookTable);
        Box search = Box.createHorizontalBox();
        this.bookSearchKey.setBounds(10, 10, 500, 30);
        this.bookSearch.setBounds(520, 11, 250, 28);
        search.add(this.bookSearchKey);
        search.add(this.bookSearch);
        box.add(search);
        box.add(jScrollPane);
        return box;
    }
}


运行结果如下:

img

虽然正常但是,
使用

jf.setSize(800, 800);

无法调整大小

问题就是:如何保证在能调整大小的情况下,这三个组件能排列正常

  • 写回答

1条回答 默认 最新

  • 关注

    窗口使用border布局,顶部flow流布局,表格放在中间部分即可。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月25日
  • 已采纳回答 11月17日
  • 创建了问题 10月27日

悬赏问题

  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭