一、Java swing概述
二、窗口
1、JFrame常用方法
- JFrame()创建一个无标题的窗口
- JFrame(String s)创建标题为s的窗口
JFrame s=new JFrame(“我的窗口”); - public void setTitle(String s) 设置窗口标题为s
- public void setBounds(int x,int y,int width,int height)
设置初始位置为(x,y),窗口宽度为width,高度为height。 - public void setSize(int width,int height)
设置窗口宽度为width,高度为height。 - public void setLocation(int x,int y)
设置窗口的位置,默认是(0,0) - public void setVisible(boolean b)
设置窗口是否可见,默认不可见。 - public void setResize(boolean b)
设置窗口是否可调整大小,默认不可调整大小 - public void setLocationRelativeTo(Component c)
设置窗口相对于指定组件的位置。c为null,则此窗口将置于屏幕的中央。 - public void dispose()
格式:类名.this.dispose()
撤销当前窗口,并释放当前窗口所使用的资源 - public void setExtendState(int state)
设置窗口的扩展状态,其中参数state取JFrame类中的下列类常量
MAXIMIZED_HORIZ(水平方向最大化)
MAXIMIZED_VERT(垂直方向最大化)
MAXIMIZED_BOTH(水平,垂直方向都最大化) - public void setDefaultCloseOperation(int operation)
设置单击窗体右上角的关闭图标后,程序会做出怎样的处理。
其中参数operation取JFrame类中的下列int static类常量。
DO_NOTHING_NO_CLOSE(什么也不做)
HIDE_ON_CLOSE(隐藏当前窗口)
DISPOSE_ON_CLOSE(隐藏当前窗口,并释放当前窗口所使用的资源)
EXIT_ON_CLOSE(结束窗口所在的应用程序) - getContentPane().setBackground(Color.lightGray);
设置窗口背景颜色
import javax.swing.*;
import java.awt.*;
public class MyFrame extends JFrame {//如果不继承JFrame类,无法使用JFrame的方法
public MyFrame()
{
setVisible(true);//设置窗口可见
setSize(800,800);//设置窗口大小
setLocationRelativeTo(null);//使窗口居中
getContentPane().setBackground(Color.lightGray);//设置窗口背景颜色
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//设置窗口关闭方式
}
public static void main(String[] args) {
new MyFrame();
}
}
2、JFrame与Frame的区别
-
导入包不同
Frame导包为awt
JFrame为swing -
关闭窗口方式不通
Frame关闭窗口要添加监听器才能关闭
3、一个窗口实现多个功能
class MyJFrame extenmds JFrame{
private JPanel contentPanel;
private JLabel welcomel;
private JButton btn;
public MyJFrame(){
setLayout(new BorderLayout());
contentPanel = new JPanel();
add(contentPanel,BorderLayout.CENTER);
welcome=new JLabel("欢迎来到图书管理系统");
contentPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 50));// 向左对齐,水平间距是20,垂直间距为40像素
contentPanel.add(welcome);
//点击按钮实现切换面板功能
btn.addActionListener((e)->{
showSpecifiedPanel(contentPanel,new SearchBook());
System.out.println("搜索图书");
});
}
/**
* 以contentPanel为底,其上覆盖想要展示的panel内容(切换panel)。
* @param contentPanel 被替换的面板
* @param showPanel 展示的面板
*/
private void showSpecifiedPanel(JPanel contentPanel, JPanel showPanel) {
contentPanel.removeAll();
System.out.println(contentPanel.getLayout());
contentPanel.add(showPanel);
contentPanel.validate();
contentPanel.repaint();
}
}
三、菜单条,菜单,菜单项
1、菜单条
JComponent类的子类JMenubar负责创建菜单条,JFrame类有一个将菜单条放到窗口中的方法:setJMenubar(JMenuBar bar);
2、菜单
JComponent类的子类JMenu负责创建菜单。
(1)、菜单设置快捷键
①JMenu jmenu=new JMenu(“About”,‘A’);
- About带有A下划线
②JMenu jmenu=new JMenu(“设置”);
jmenu.setMenmonic(‘A’);
注意:菜单不能用setAccelerator方法,Alt+'A’才能使用快捷键。
3、菜单项
JComponent类的子类JMenuItem负责创建菜单项。
注意:菜单无法设置图标
(1)、菜单项设置快捷键
①JMenuItem jmenuitem=new JMenuItem(“About”,‘A’);
②JMenuItem jmenuitem=new JMenuItem(“设置”);
jmenuitem.setAccelerator(Keystroke.getkeystroke(“A”));
(2)、菜单项设置图标
1、jMenuItem[0].setIcon(new ImageIcon(“img/fish01_01.png”));
2、JMenuItem jmenuitem=new JMenuItem(“About”,new ImageIcon(“a.gif”));
4、嵌入子菜单
JMenu是JMenuItem的子类,因此菜单本身也是菜单项,当把一个菜单看作菜单项添加到某个菜单中时,称这样的菜单为子菜单。
JMenu sonmenu=new JMenu("类型");//创建子菜单对象
JMenuItem[] sonjMenuItem =new JMenuItem[]{new JMenuItem("jpg"),new JMenuItem("png"),new JMenuItem("jspg")};
jMenu[0].add(sonmenu);//把子菜单加入菜单
for(JMenuItem f:sonjMenuItem){
sonmenu.add(f);//把菜单项加入子菜单
}
四、常用组件与布局
1、常用组件
(1)、JTextField(文本框)
- 允许用户在文本框中输入单行文字
(2)、JTextArea(文本区)
- 允许用户在文本框中输入多行文字
(3)、JButton(按钮)
1、 对JButton大小的设置
——因为JButen是属于小器件类型的,所以一般的setSize不能对其惊醒大小的设置,所以一般我们用
button.setPreferredSize(new Dimension(30,30));
//(30,30) 是你要设置按钮的大小
2、 对JButton透明的设置
——按钮设置为透明,这样就不会挡着后面的背景
button.setContentAreaFilled(false);
3、 对JButton去掉按钮的边框的设置
——如果有时候你的按钮不需要边框因为边框影响美观或者是因为你需要的是点击之前按钮呈现普通图
标形式,点击之后才有各种效果的话就可以用这种方法去掉边框
button.setBorderPainted(false);
4、 对JButton添加图标呢的设置
—— // 实例化一个图标对象
ImageIcon image = new ImageIcon(icons[i]);
// 实例化按钮对象,并且设置按钮上显示图片
JButton button = new JButton(image);
——或者
button.setIcon(new ImageIcon(getClass().getResource(“qq.png”)));
//qq.png是你要添加的图片
5 、 让按钮随按钮上的图案变化
butten.setMargin(new Insets(0,0,0,0));
6、 设置凸起来的按钮,很多其他的swing也可用此方法
butten.setBorder(BorderFactory.createRaisedBevelBorder());
7、 设置凹起来的按钮,很多其他的swing也可用此方法
button.setBorder(BorderFactory.createLoweredBevelBorder());
8、 设置按钮的前景色和背景色
button .setFont(new java.awt.Font(“华文行楷”, 1, 15));
button.setBackground(Color.green);
9、 改变按钮的样式
UIManager.setLookAndFeel(“com.sun.java.swing.plaf.windows.WindowsLookAndFeel”);
- 允许用户单击按钮
Jbutoto被覆盖怎么重新显示
public void paint(Graphics g) {
button.requestFocus();//使组件重新显示
}
Jbutton怎么隐藏问题
//是否填充
jButton[j].setContentAreaFilled(false);
//是否显示按钮边框
jButton[j].setBorderPainted(false);
//设置按钮文字
jButton[j].setText("");
//按钮是否显示
jButton[j].setVisible(false);
JButton添加图片(图片按钮)
JButton样式改变
button2.setBorderPainted(false);//按钮失去边框
button2.setFocusPainted(false);//按钮失去焦点
4、JLabel(标签)
- 标签为用户提供提示信息
JLabel标签添加背景和字体颜色
Font font=new Font("宋体",Font.PLAIN,40);//定义
jLabel.setOpaque(true); //此句是重点,设置背景颜色必须先将它设置为不透明的,因为默认是透明的。
jLabel.setBackground(Color.red);//设置背景颜色为red。
jLabel.setForeground(Color.black);//设置字体颜色为black。
jLabel.setFont(font);//设置字体和大小。
JCheckBox(复选框)
JRadioButton(单选按钮)
JComboBox(下拉列表)
JPasswordField(密码框)
布局
- 容器可以使用设置布局方法:setLayout(布局对象),
- JFrame默认是BorderLayout布局
- JPanel默认是FlowLayout布局
1、FlowLayout布局(流式布局)
五种排列方式:
CENTER,LEFT,RIGHT,LEADING,TRAILING
LEFT = 0; ——左对齐
CENTER = 1; ——居中对齐
RIGHT = 2; ——右对齐
LEADING = 3; ——从开始的方向对齐
TRAILING = 4; ——从结束的方向对齐
在FlowLayout中,默认的是CENTER,在实际操作中发现LEFT与LEADING效果相同,RIGHT与TRAILING 效果相同,因为我们的电脑布局是从左往右的(就是阅读的习惯是从左往右),而在有的国家是从右往左,所以在有的国家LEFT与TRAILING效果相同。
// 向左对齐,水平间距是20,垂直间距为40像素
setLayout(new FlowLayout(FlowLayout.LEFT, 600, 200));
JPanel con=new JPanel();
con.setLayout(new FlowLayout());
2、BorderLayout布局(边界布局)
3、CardLayout布局(卡片布局)
4、GridLayout布局(网格布局)
5、null布局(绝对布局)
- 组件的父元素设置null布局,组件设置大小位置是要使用 setBounds(int x,int y,int width,int height);
6、BoxLayout布局(盒式布局)
常用容器
1、JPanel面板
2、JTabbedPanel选项卡面板
3、JScrollPane滚动面板
4、JSplitPane拆分面板
5、JLayeredPane分层面板
六、JTable
1、 创建表格
// -------------表格---------------
DefaultTableModel model = new DefaultTableModel();
//设置列名
model.addColumn("书名", new Vector<Integer>());
model.addColumn("作者", new Vector<Integer>());
model.addColumn("类型", new Vector<Integer>());
model.addColumn("库存", new Vector<Integer>());
JTable jTable = new JTable(model);
jTable.setRowHeight(50);
jTable.setFont(new Font("宋体", Font.BOLD, 20));
jTable.setBackground(Color.pink);
//表格内容居中显示
DefaultTableCellRenderer tcr = new DefaultTableCellRenderer();
tcr.setHorizontalAlignment(JLabel.CENTER);
jTable.setDefaultRenderer(Object.class, tcr);
//======表头属性设置====
jTable.getTableHeader().setBackground(new Color(0,191,255));
jTable.getTableHeader().setFont(new Font("楷体", Font.BOLD, 25));
//======滚动面板=======
JScrollPane pane = new JScrollPane(jTable);
pane.setBounds((width / 2) - 400, 300, 800, 400);
add(panel);
//sql语句中添加行
while (rs.next()) {
flag = true;
String name = rs.getString("name");
String author = rs.getString("author");
String type = rs.getString("type");
String num = rs.getString("num");
//添加一行数据
model.addRow(new Vector<>(Arrays.asList(name, author, type, author, num)));
System.out.println("添加"+count);
}
2、设置表格宽度,高度
//设置i列的宽度
table.getColumnModel().getColumn(i).setPreferredWidth(200);
//设置高度
table.setRowHeight(30);
3、设置表头属性
/**
* 设置表单的表头高度
* @param table
*/
public static void setTableHeadHeight(JTable table, int height){
table.getTableHeader().setPreferredSize(new Dimension(1, height));
}
/**
* 设置表头的字体
* @param table
*/
public static void setTableHeadFont(JTable table, Font font){
table.getTableHeader().setFont(font);
}
/**
* 设置表头的背景颜色
* @param table
*/
public static void setTableHeadColor(JTable table, Color color){
table.getTableHeader().setBackground(color);
}
/**
* 设置表头文字的颜色
* @param table
* @param color
*/
public static void setTableHeadFontColor(JTable table, Color color){
table.getTableHeader().setForeground(color);
}
获取表格行、列数
行数
while(rs.next()){
int row=rs.getRow();
}
int row=0;
while(rs.next()){
row=row+1;
}
注意:rs.getRow()只能放在rs.next后面才能使用
列数
//获得列数
int numCols = results.getMetaData().getColumnCount();
清除原有行
model.setRowCount(0);// 清除原有行