使用JPanel进行swing Java组件部署
我希望组件部署如下图所示:
我编写了一段代码,在JFrame中生成两个JPanel,并将组件JPanel放在左侧。我将框架布局设置为BorderLayout,将每个面板的布局设置为FlowLayout。然而,结果并不是我想要的。即使列表不显示
结果图片:
你能告诉我怎么办吗
下面有一个代码
package com.java.APISearch;
import java.awt.*;
import javax.swing.*;
import javax.swing.JPanel;
public class MainFrame extends JFrame {
JPanel search;
JPanel result;
JLabel ksLb;
JTextField ksTf;
JButton ksOK;
JCheckBox choicePackage;
JCheckBox choiceClass;
JCheckBox choiceFunc;
JTextField dsTf;
JButton dsOK;
JLabel rcLb;
JList<String> rcList;
JTextField resultTf;
Container contentPane;
public MainFrame(String title) {
super(title);
Toolkit tk = Toolkit.getDefaultToolkit();
Dimension screenSize = tk.getScreenSize();
setLocation(screenSize.width/2 - 300, screenSize.height/2 - 200);
setSize(new Dimension(600, 400));
setResizable(false);
setLayout(new BorderLayout());
search = new JPanel();
result = new JPanel();
search.setLayout(new FlowLayout(FlowLayout.LEFT));
search.setSize(new Dimension(300,400));
result.setLayout(new FlowLayout());
result.setSize(new Dimension(300,400));
contentPane = getContentPane();
contentPane.add(search, BorderLayout.WEST);
contentPane.add(result, BorderLayout.EAST);
ksLb = new JLabel("키워드 검색");
ksTf = new JTextField(20);
ksOK = new JButton("검색");
search.add(ksLb);
search.add(ksTf);
search.add(ksOK);
choicePackage = new JCheckBox("package");
choiceClass = new JCheckBox("class");
choiceFunc = new JCheckBox("function");
dsTf = new JTextField(20);
dsOK = new JButton("검색");
search.add(choicePackage);
search.add(choiceClass);
search.add(choiceFunc);
search.add(dsTf);
search.add(dsOK);
rcLb = new JLabel("recent search");
rcList = new JList<String>();
search.add(rcLb);
search.add(rcList);
}
}
# 1 楼答案
解决复杂计算任务的常用策略是将它们分解为小的、定义良好的可管理任务。分而治之
这也适用于gui:将设计分解为小的、易于布局的容器
例如,在这种情况下,首先将设计分为两个区域:
Serach面板添加到
JFrame
的NORTH
,主面板添加到JFrame
的CENTER
。主面板是所有其他gui组件的容器。查看代码中的更多信息下面是一个框架来演示该策略。请注意以下评论:
更多应用此策略的示例:12和3
# 2 楼答案
要做到这一点,可以使用NetBeans(或其他帮助您创建布局的工具)
在NetBeans中,获得想要的东西大约需要5分钟。这比为自己编写代码要容易得多
在我个人看来,对于大多数基于Swing的组件来说,GridBagLayout是最好的选择。您可以轻松地控制每个单元(它是否应该生长,锚应该如何运行,组件是否应该填充单元,等等)
看看这里:https://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html
如果你不知道哪种布局最适合你,你可以看看这里:
https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html
关于NetBeans教程,请看这里:https://netbeans.org/kb/docs/java/quickstart-gui.html