Java 使用 JPanel 进行组件部署
Java component deployment using JPanel
我想要这样的组件部署:
我写了一段代码,在一个 JFrame 中制作两个 JPanel,并将组件 JPanel 放在左侧。我将 Frame Layout 设置为 BorderLayout,将 Each panel 的 Layout 设置为 FlowLayout。然而,结果并不是我想要的。连List都没有出现。
结果图片:
你能告诉我该怎么做吗?
下面有代码
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);
}
}
解决复杂计算任务的常用策略是将它们分解为小的、定义明确的可管理任务。分而治之。
这也适用于 gui:将设计分解为易于布局的小容器。
在这种情况下,例如首先将设计分为两个区域:
搜索面板已添加到 JFrame
的 NORTH
,主面板已添加到 JFrame
的 CENTER
。主面板是所有其他 gui 组件的容器。在代码中查看更多信息。
这是演示该策略的框架。注意评论:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class MainFrame extends JFrame {
public MainFrame(String title) {
super(title);
setSize(new Dimension(600, 400));
setResizable(false);
//setLayout(new BorderLayout());// no need. its the default for JFrame
JPanel search = new JPanel();
search.setLayout(new FlowLayout(FlowLayout.LEFT));
//search.setSize(new Dimension(300,400)); //let layout manager set size
//set preferred size if needed
JLabel ksLb = new JLabel("Search:");
JTextField ksTf = new JTextField(20);
JButton ksOK = new JButton("Click Me");
search.add(ksLb);
search.add(ksTf);
search.add(ksOK);
add(search, BorderLayout.NORTH); //add search to content pane
//construct a container to hold all the rest
//set border layout to it
JPanel mainPanel = new JPanel(new BorderLayout());
//add content to mainPanel:
//add result to NORTH
//add a JPanel to hold list and label to CENTER
add(mainPanel, BorderLayout.CENTER);//main to content pane
setVisible(true);
}
}
应用此策略的更多示例:1 and
要制作这样的东西,请使用 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
我想要这样的组件部署:
我写了一段代码,在一个 JFrame 中制作两个 JPanel,并将组件 JPanel 放在左侧。我将 Frame Layout 设置为 BorderLayout,将 Each panel 的 Layout 设置为 FlowLayout。然而,结果并不是我想要的。连List都没有出现。
结果图片:
你能告诉我该怎么做吗?
下面有代码
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);
}
}
解决复杂计算任务的常用策略是将它们分解为小的、定义明确的可管理任务。分而治之。
这也适用于 gui:将设计分解为易于布局的小容器。
在这种情况下,例如首先将设计分为两个区域:
搜索面板已添加到 JFrame
的 NORTH
,主面板已添加到 JFrame
的 CENTER
。主面板是所有其他 gui 组件的容器。在代码中查看更多信息。
这是演示该策略的框架。注意评论:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class MainFrame extends JFrame {
public MainFrame(String title) {
super(title);
setSize(new Dimension(600, 400));
setResizable(false);
//setLayout(new BorderLayout());// no need. its the default for JFrame
JPanel search = new JPanel();
search.setLayout(new FlowLayout(FlowLayout.LEFT));
//search.setSize(new Dimension(300,400)); //let layout manager set size
//set preferred size if needed
JLabel ksLb = new JLabel("Search:");
JTextField ksTf = new JTextField(20);
JButton ksOK = new JButton("Click Me");
search.add(ksLb);
search.add(ksTf);
search.add(ksOK);
add(search, BorderLayout.NORTH); //add search to content pane
//construct a container to hold all the rest
//set border layout to it
JPanel mainPanel = new JPanel(new BorderLayout());
//add content to mainPanel:
//add result to NORTH
//add a JPanel to hold list and label to CENTER
add(mainPanel, BorderLayout.CENTER);//main to content pane
setVisible(true);
}
}
应用此策略的更多示例:1
要制作这样的东西,请使用 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