GUI编程-Swing
Swing
1.窗口和面板
/**
* JFrame
*/
public class S01JFrame {
public static void main(String[] args) {
new S01JFrame().init();
}
public void init(){
JFrame jFrame = new JFrame();
jFrame.setSize(500,400);
jFrame.setLocationRelativeTo(null);
jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//获取窗体的容器,设置背景色才有效
Container container = jFrame.getContentPane();
container.setBackground(Color.BLUE);
jFrame.setVisible(true);
Label label = new Label("this is us");
label.setAlignment(Label.CENTER);
jFrame.add(label);
JLabel jLabel = new JLabel("hello world");
jLabel.setHorizontalAlignment(2);
jFrame.add(jLabel);
}
}
2.对话框(弹窗)
用来提示信息,或确认某系信息
/**
* Dialog
*/
public class S02DialogWindow extends JFrame {
public S02DialogWindow(){
setVisible(true);
setSize(500,300);
setLocationRelativeTo(null);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//JFrame 放东西,容器
Container container = getContentPane();
//绝对布局
container.setLayout(null);
//按钮
JButton button=new JButton("点击弹出对话框");
button.setBounds(30,30,100,30);
//按钮监听
button.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
//弹窗
new MyDialog();
}
});
container.add(button);
}
public static void main(String[] args) {
new S02DialogWindow();
}
}
class MyDialog extends JDialog{
public MyDialog(){
setVisible(true);
setBounds(50,50,200,200);
}
}
3.标签(JLabel),图标(Icon,ImageIcon)
/**
* Icon IconImage
*/
public class S03Icon extends JFrame implements Icon{
private int width;
private int height;
public S03Icon(){
}
public S03Icon (int width,int height){
this.width=width;
this.height=height;
}
public void init(){
S03Icon icon=new S03Icon(50,50);
//Icon,图标放在标签上,中间对齐;也可放在按钮上!
JLabel jLabel1=new JLabel("Icon",icon,SwingConstants.CENTER);
Container container=getContentPane();
//设置布局方式,以布置多个组建
container.setLayout(new FlowLayout());
container.add(jLabel1);
//ImageIcon
URL url = S03Icon.class.getResource("green.jpg");
JLabel jLabel2=new JLabel("ImageIcon");
jLabel2.setIcon(new ImageIcon(url));
container.add(jLabel2);
//设置窗口属性
setVisible(true);
setBounds(200,100,500,300);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new S03Icon().init();
}
@Override
public void paintIcon(Component c, Graphics g, int x, int y) {
g.fillOval(x,y,width,height);
}
@Override
public int getIconWidth() {
return width;
}
@Override
public int getIconHeight() {
return height;
}
}
4.滚动面板(JScrollPane),文本域(JTextArea)
/**
* JScrollPane,JTextArea
*/
public class S04ScrollPane extends JFrame {
public S04ScrollPane(){
Container container = this.getContentPane();
//JTextArea文本域
JTextArea textArea = new JTextArea(30, 50);
textArea.setText("hello world!");
//JScrollPane面板
JScrollPane scrollPane = new JScrollPane(textArea);
container.add(scrollPane);
//JFrame设置
setVisible(true);
setBounds(100,100,500,300);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new S04ScrollPane();
}
}
5.按钮(JButton),单选按钮(JRadioButton),复选按钮(JCheckBox)
/**
* JButton,JRadioButton,JCheckBox
*/
public class S05JButton extends JFrame {
public S05JButton(){
Container container=this.getContentPane();
//将图片变为图标
URL url=S05JButton.class.getResource("green.jpg");
Icon icon = new ImageIcon(url);
//1.JButton 把图标放在按钮上
JButton jButton = new JButton();
jButton.setIcon(icon);
jButton.setToolTipText("图片按钮");
//按钮放入容器
container.add(jButton);
//2.RadioButton 单选框
JRadioButton radioButton1 = new JRadioButton("RadioButton1");
JRadioButton radioButton2 = new JRadioButton("RadioButton2");
JRadioButton radioButton3 = new JRadioButton("RadioButton3");
//分组
ButtonGroup btnGroup = new ButtonGroup();
btnGroup.add(radioButton1);
btnGroup.add(radioButton2);
btnGroup.add(radioButton3);
//按钮放入容器
container.add(jButton);
container.add(radioButton1, BorderLayout.NORTH);
container.add(radioButton2, BorderLayout.CENTER);
container.add(radioButton3, BorderLayout.SOUTH);
//3.CheckBox 复选框
JCheckBox checkBox1 = new JCheckBox("checkBox1 ");
JCheckBox checkBox2 = new JCheckBox("checkBox2 ");
JCheckBox checkBox3 = new JCheckBox("checkBox3 ");
//按钮放入容器
container.add(checkBox1);
container.add(checkBox2);
container.add(checkBox3);
//JFrame设置
setVisible(true);
setBounds(100,100,500,300);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new S05JButton();
}
}
6.下拉框(JComboBox),列表框(JList)
7.文本框(JTextField)、密码框(JPasssordField)、文本域(JTextArea)
/**
* JTextField,JPasswordField,JTextArea
*/
public class S07JText extends JFrame {
public S07JText(){
Container container=getContentPane();
//1.JTextField文本框
JTextField jTextField = new JTextField("hello");
container.add(jTextField,BorderLayout.NORTH);
//2.JPasswordField密码框
JPasswordField jPasswordField = new JPasswordField("password");
container.add(jPasswordField, BorderLayout.CENTER);
//3.JTextArea文本域
JTextArea jTextArea = new JTextArea();
jTextArea.setText("This is us");
container.add(jTextArea,BorderLayout.SOUTH);
//JFrame设置
setVisible(true);
setBounds(100,100,500,300);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new S07JText();
}
}
8.菜单条(JMenuBar)、菜单(JMenu)、菜单项(JMenuItem)
java中的菜单,可以通过引入 java.swing来实现。
在java中菜单有如下三大组件:JMenuBar,JMenu,JMenuItem。
JMenuBar是相关的菜单栏,一般一个窗体中有一个就可以了;
JMenu有两种功能,一是在菜单栏中显示,二是当它被加入到另一个JMenu中时,会产生引出子菜单的效果;
JMenuItem是JMenu目录下的菜单。
菜单由 Swing 中的 JMenu 类实现,可以包含多个菜单项和带分隔符的菜单。在菜单中,菜单项由 JMenuItem 类表示,分隔符由 JSeparator 类表示。
菜单本质上是带有关联 JPopupMenu 的按钮。当按下“按钮”时,就会显示 JPopupMenu。如果“按钮”位于 JMenuBar 上,则该菜单为顶层窗口。如果“按钮”是另一个菜单项,则 JPopupMenu 就是“下拉”菜单。
菜单如果依附到 JMenuBar 对象上,则此菜单就是菜单栏中的菜单。菜单如果依附在 JPopupMenu 对象上,此菜单就是弹出式菜单。实现菜单栏和弹出式菜单的原理是一样的,但在具体的实现方式上有一些区别。
构造方法
JMenu(); //创建一个无文本的 JMenu 对象;
JMenu(String s); //创建一个带有指定文本的 Menu 对象;
JMenu 类的常用方法
add(Action a); //创建连接到指定 Action 对象的新菜单项,并将其追加到此菜单的末尾
add(Component c); //将某个组件追加到此菜单的末尾
add(Component c,int index); //将指定组件添加到此容器的给定位置
add(JMenuItem menultem); //将某个菜单项追加到此菜单的末尾
add(String s); //创建具有指定文本的新菜单项,并将其追加到此菜单的末尾
addSeparator(); //将新分隔符追加到菜单的末尾
doCliclc(int pressTime); //以编程方式执行“单击”操作
getDelay(); //返回子菜单向上或向下弹出前建议的延迟(以毫秒为单位)
getltem(int pos); //返回指定位置的 JMenuItem
getItemCount(); //返回菜单上的项数,包括分隔符
getMenuComponent(int n); //返回位于位置 n 的组件
getMenuComponents(); //返回菜单子组件的 Component 数组
getSubElements(); //返回由 MenuElement 组成的数组,其中包含此菜单组件的子菜单
insert(JMenuItem mi,int pos); //在给定位置插入指定的 JMenuitem
insert(String s,pos); //在给定位置插入具有指定文本的新菜单项
insertSeparator(int index); //在指定的位置插入分隔符
isMenuComponent(Component c); //如果在子菜单层次结构中存在指定的组件,则返回 true
isPopupMenuVisible(); //如果菜单的弹出窗口可见,则返回 rue
isSelected(); //如果菜单是当前选择的(即高亮显示的)菜单,则返回 true
isTopLevelMenu(); //如果菜单是“顶层菜单”(即菜单栏的直接子级),则返回 true
setDelay(int d); //设置菜单的 PopupMenu 向上或向下弹出前建议的延迟
setMenuLocation(int x,int y); //设置弹出组件的位置
setPopupMenuVisible(boolean b); //设置菜单弹出的可见性
setSelected(boolean b); //设置菜单的选择状态
/**
* JMenuBar,JMenu,JMenuItem
*/
public class S08JMenu extends JMenuBar {
public S08JMenu(){
add(createFileMenu());
add(createEditMenu());
setVisible(true);
}
//定义“文件”菜单
private JMenu createFileMenu() {
JMenu menu = new JMenu("文件(F)");
menu.setMnemonic(KeyEvent.VK_F);//设置跨界访问符
JMenuItem item = new JMenuItem("新建(N)", KeyEvent.VK_N);
item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.CTRL_MASK));
menu.add(item);
item = new JMenuItem("打开(O)", KeyEvent.VK_O);
item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.CTRL_MASK));
menu.add(item);
return menu;
}
//定义“编辑”菜单
private JMenu createEditMenu() {
JMenu menu = new JMenu("编辑(E)");
menu.setMnemonic(KeyEvent.VK_E);//设置跨界访问符
JMenuItem item = new JMenuItem("撤销(U)", KeyEvent.VK_U);
item.setEnabled(false);
menu.add(item);
menu.addSeparator();
item = new JMenuItem("复制(C)", KeyEvent.VK_C);
menu.add(item);
item = new JMenuItem("粘贴(P)", KeyEvent.VK_P);
menu.add(item);
menu.addSeparator();
JCheckBoxMenuItem cbMenuItem = new JCheckBoxMenuItem("自动换行");
menu.add(cbMenuItem);
return menu;
}
//主程序
public static void main(String[] args) {
JFrame frame = new JFrame("菜单栏");
frame.setSize(300,200);
frame.setLocationRelativeTo(null);
frame.setJMenuBar(new S08JMenu());
frame.setVisible(true);
}
}
上述代码调用 JMenu 对象的 setMnemonic() 方法设置当前菜单的快速访问符。该符号必须对应键盘上的一个键,并且应该使用 java.awt.event.KeyEvent 中定义的 VK—XXX 键代码之一指定。
提示:快速访问符是一种快捷键,通常在按下 Alt 键和某个字母时激活。例如,常用的 Alt+F 是“文件” 菜单的快速访问符。
JMenuItem 类实现的是菜单中的菜单项。菜单项本质上是位于列表中的按钮。当用户单击“按钮”时,则执行与菜单项关联的操作。JMenuItem 的常用构造方法有以下三个。
JMenuItem(String text):创建带有指定文本的 JMenuItem。
JMenuItem(String text,Icon icon):创建带有指定文本和图标的 JMenuItem。
JMenuItem(String text,int mnemonic):创建带有指定文本和键盘助记符的 JMenuItem。
在该实例中,创建菜单项后调用 JMenuItem 对象的 setAccelerator(KeyStroke) 方法来设置修改键,它能直接调用菜单项的操作监听器而不必显示菜单的层次结构。在本实例中没有实现事件监听机制,所以使用快捷键时将得不到程序的任何响应,但是在菜单项中将出现快捷键。
在一般的菜单设置中,二级菜单的模式是:JMenu-----JMenuItem
而三级菜单的实质是:JMenu-----JMenu-----JMenuItem,也就是把原来的 JMenuItem 换成了一个新的 JMenu。
运行该实例,图 1 所示是“文件”菜单展开效果,图 2 所示是“编辑”菜单展开的效果。
本文来自博客园,作者:老李学Java,转载请注明原文链接:https://www.cnblogs.com/JasonPro/p/16069308.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律