一共有三个组件,一个搜索框,一个搜索按钮,一个展示用的表格,搜索框和按钮在一行,展示用的表格在下一行。
问题:如何在保证能自由修改窗口大小的情况下,使得这三个组件排列正常
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;
}
}
运行结果如下:
两个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;
}
}
运行结果如下:
虽然正常但是,
使用
jf.setSize(800, 800);
无法调整大小
问题就是:如何保证在能调整大小的情况下,这三个组件能排列正常