java图形界面
本文内容纲要:
-组件
-1标签
-2使用JLabel显示图片
-3按钮
-4复选框
-5单选框
-6按钮组
-7下拉框
-8对话框
-9文本框
-10密码框
-11文本域
-12进度条
-13文件选择器
-面板
-1基本面板
-2ContentPanel
-3SplitPanel
-4JScrollPanel
-5TabbedPanel
-6CardLayerout
组件
JAVA的图形界面下有两组控件,一组是awt,一组是swing。
一般都是使用swing
1标签
Label用于显示文字
importjava.awt.Color;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
publicclassTestGUI{publicstaticvoidmain(String[]args){JFramef=newJFrame("LoL");f.setSize(400,300);f.setLocation(200,200);f.setLayout(null);JLabell=newJLabel("LOL文字");//文字颜色l.setForeground(Color.red);l.setBounds(50,50,280,30);f.add(l);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);}}
2使用JLabel显示图片
javaGUI显示图片是通过在label上设置图标实现的
importjavax.swing.ImageIcon;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
publicclassTestGUI{publicstaticvoidmain(String[]args){JFramef=newJFrame("LoL");f.setSize(400,300);f.setLocation(580,200);f.setLayout(null);JLabell=newJLabel();//根据图片创建ImageIcon对象ImageIconi=newImageIcon("e:/project/j2se/shana.png");//设置ImageIconl.setIcon(i);//label的大小设置为ImageIcon,否则显示不完整l.setBounds(50,50,i.getIconWidth(),i.getIconHeight());f.add(l);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);}}
3按钮
JButton普通按钮
importjavax.swing.JButton;
importjavax.swing.JFrame;
publicclassTestGUI{publicstaticvoidmain(String[]args){JFramef=newJFrame("LoL");f.setSize(400,300);f.setLocation(200,200);f.setLayout(null);JButtonb=newJButton("一键秒对方基地挂");b.setBounds(50,50,280,30);f.add(b);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);}}
4复选框
JCheckBox复选框
使用isSelected来获取是否选中了
importjavax.swing.JCheckBox;
importjavax.swing.JFrame;
publicclassTestGUI{
publicstaticvoidmain(String[]args){JFramef=newJFrame("LoL");f.setSize(400,300);f.setLocation(580,200);f.setLayout(null);JCheckBoxbCheckBox=newJCheckBox("物理英雄");//设置为默认被选中bCheckBox.setSelected(true);bCheckBox.setBounds(50,50,130,30);JCheckBoxbCheckBox2=newJCheckBox("魔法英雄");bCheckBox2.setBounds(50,100,130,30);//判断是否被选中System.out.println(bCheckBox2.isSelected());f.add(bCheckBox);f.add(bCheckBox2);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);}}
5单选框
JRadioButton单选框
使用isSelected来获取是否选中了
为了实现只能选中一个,还需要用到ButtonGroup
importjavax.swing.JCheckBox;
importjavax.swing.JFrame;importjavax.swing.JRadioButton;publicclassTestGUI{publicstaticvoidmain(String[]args){JFramef=newJFrame("LoL");f.setSize(400,300);f.setLocation(580,200);f.setLayout(null);JRadioButtonb1=newJRadioButton("物理英雄");//设置为默认被选中b1.setSelected(true);b1.setBounds(50,50,130,30);JRadioButtonb2=newJRadioButton("魔法英雄");b2.setBounds(50,100,130,30);System.out.println(b2.isSelected());f.add(b1);f.add(b2);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);}}
6按钮组
ButtonGroup对按钮进行分组,把不同的按钮,放在同一个分组里,同一时间,只有一个按钮会被选中
importjavax.swing.ButtonGroup;
importjavax.swing.JFrame;
importjavax.swing.JRadioButton;
publicclassTestGUI{publicstaticvoidmain(String[]args){JFramef=newJFrame("LoL");f.setSize(400,300);f.setLocation(580,240);f.setLayout(null);JRadioButtonb1=newJRadioButton("物理英雄");b1.setSelected(true);b1.setBounds(50,50,130,30);JRadioButtonb2=newJRadioButton("魔法英雄");b2.setBounds(50,100,130,30);//按钮分组ButtonGroupbg=newButtonGroup();//把b1,b2放在同一个按钮分组对象里,这样同一时间,只有一个按钮会被选中bg.add(b1);bg.add(b2);f.add(b1);f.add(b2);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);}}
7下拉框
JComboBox下拉框
使用getSelectedItem来获取被选中项
使用setSelectedItem()来指定要选中项
importjavax.swing.JComboBox;
importjavax.swing.JFrame;
publicclassTestGUI{publicstaticvoidmain(String[]args){JFramef=newJFrame("LoL");f.setSize(400,300);f.setLocation(580,240);f.setLayout(null);//下拉框出现的条目String[]heros=newString[]{"卡特琳娜","库奇"};JComboBoxcb=newJComboBox(heros);cb.setBounds(50,50,80,30);f.add(cb);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);}}
8对话框
JOptionPane用于弹出对话框
JOptionPane.showConfirmDialog(f,“是否使用外挂?”);
表示询问,第一个参数是该对话框以哪个组件对齐
JOptionPane.showInputDialog(f,“请输入yes,表明使用外挂后果自负”);
接受用户的输入
JOptionPane.showMessageDialog(f,“你使用外挂被抓住!“);
显示消息
mportjavax.swing.JFrame;
importjavax.swing.JOptionPane;
publicclassTestGUI{
publicstaticvoidmain(String[]args){JFramef=newJFrame("LoL");f.setSize(400,300);f.setLocation(580,240);f.setLayout(null);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);intoption=JOptionPane.showConfirmDialog(f,"是否使用外挂?");if(JOptionPane.OK_OPTION==option){Stringanswer=JOptionPane.showInputDialog(f,"请输入yes,表明使用外挂后果自负");if("yes".equals(answer))JOptionPane.showMessageDialog(f,"你使用外挂被抓住!封号一年!");}}}
9文本框
JTextField输入框
setText设置文本
getText获取文本
JTextField是单行文本框,如果要输入多行数据,请使用JTextArea
tfPassword.grabFocus();表示让密码输入框获取焦点
importjava.awt.Dimension;
importjava.awt.FlowLayout;
importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JTextField;publicclassTestGUI{publicstaticvoidmain(String[]args){JFramef=newJFrame("LoL");f.setSize(400,300);f.setLocation(200,200);f.setLayout(newFlowLayout());JLabellName=newJLabel("账号:");//输入框JTextFieldtfName=newJTextField("");tfName.setText("请输入账号");tfName.setPreferredSize(newDimension(80,30));JLabellPassword=newJLabel("密码:");//输入框JTextFieldtfPassword=newJTextField("");tfPassword.setText("请输入密码");tfPassword.setPreferredSize(newDimension(80,30));f.add(lName);f.add(tfName);f.add(lPassword);f.add(tfPassword);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);tfPassword.grabFocus();}}
10密码框
JPasswordField密码框
与文本框不同,获取密码框里的内容,推荐使用getPassword,该方法会返回一个字符数组,而非字符串
importjava.awt.Dimension;
importjava.awt.FlowLayout;
importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JPasswordField;publicclassTestGUI{publicstaticvoidmain(String[]args){JFramef=newJFrame("LoL");f.setSize(400,300);f.setLocation(200,200);f.setLayout(newFlowLayout());JLabell=newJLabel("密码:");//密码框JPasswordFieldpf=newJPasswordField("");pf.setText("&48kdh4@#");pf.setPreferredSize(newDimension(80,30));//与文本框不同,获取密码框里的内容,推荐使用getPassword,该方法会返回一个字符数组,而非字符串char[]password=pf.getPassword();Stringp=String.valueOf(password);System.out.println(p);f.add(l);f.add(pf);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);}}
11文本域
JTextArea:文本域。
和文本框JTextField不同的是,文本域可以输入多行数据
如果要给文本域初始文本,通过\n来实现换行效果
JTextArea通常会用到append来进行数据追加
如果文本太长,会跑出去,可以通过setLineWrap(true)来做到自动换行
importjava.awt.Dimension;
importjava.awt.FlowLayout;
importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JTextArea;publicclassTestGUI{publicstaticvoidmain(String[]args){JFramef=newJFrame("LoL");f.setSize(400,300);f.setLocation(200,200);f.setLayout(newFlowLayout());JLabell=newJLabel("文本域:");JTextAreata=newJTextArea();ta.setPreferredSize(newDimension(200,150));//\n换行符ta.setText("抢人头!\n抢你妹啊抢!\n");//追加数据ta.append("我去送了了了了了了了了了了了了了了了了了了了了了了了了");//设置自动换行ta.setLineWrap(true);f.add(l);f.add(ta);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);}}
12进度条
importjava.awt.Dimension;
importjava.awt.FlowLayout;
importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JProgressBar;importjavax.swing.JTextArea;publicclassTestGUI{publicstaticvoidmain(String[]args){JFramef=newJFrame("LoL");f.setSize(400,300);f.setLocation(200,200);f.setLayout(newFlowLayout());JProgressBarpb=newJProgressBar();//进度条最大100pb.setMaximum(100);//当前进度是50pb.setValue(50);//显示当前进度pb.setStringPainted(true);f.add(pb);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);}}
13文件选择器
JFileChooser表示文件选择器
使用FileFilter用于仅选择.txt文件
fc.setFileFilter(newFileFilter(){
publicStringgetDescription(){
return".txt";}publicbooleanaccept(Filef){returnf.getName().toLowerCase().endsWith(".txt");}});
fc.showOpenDialog();用于打开文件
fc.showSaveDialog();用于保存文件
importjava.awt.FlowLayout;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.io.File;
importjavax.swing.JButton;importjavax.swing.JFileChooser;importjavax.swing.JFrame;importjavax.swing.JOptionPane;importjavax.swing.filechooser.FileFilter;publicclassTestGUI{publicstaticvoidmain(String[]args){finalJFramef=newJFrame("LOL");f.setLayout(newFlowLayout());finalJFileChooserfc=newJFileChooser();fc.setFileFilter(newFileFilter(){@OverridepublicStringgetDescription(){//TODOAuto-generatedmethodstubreturn".txt";}@Overridepublicbooleanaccept(Filef){returnf.getName().toLowerCase().endsWith(".txt");}});JButtonbOpen=newJButton("打开文件");JButtonbSave=newJButton("保存文件");f.add(bOpen);f.add(bSave);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setSize(250,150);f.setLocationRelativeTo(null);f.setVisible(true);bOpen.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEvente){intreturnVal=fc.showOpenDialog(f);Filefile=fc.getSelectedFile();if(returnVal==JFileChooser.APPROVE_OPTION){JOptionPane.showMessageDialog(f,"计划打开文件:"+file.getAbsolutePath());}}});bSave.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEvente){intreturnVal=fc.showSaveDialog(f);Filefile=fc.getSelectedFile();if(returnVal==JFileChooser.APPROVE_OPTION){JOptionPane.showMessageDialog(f,"计划保存到文件:"+file.getAbsolutePath());}}});}
}
面板
1基本面板
JPanel即为基本面板
面板和JFrame一样都是容器,不过面板一般用来充当中间容器,把组件放在面板上,然后再把面板放在窗体上。
一旦移动一个面板,其上面的组件,就会全部统一跟着移动,采用这种方式,便于进行整体界面的设计
importjava.awt.Color;
importjava.awt.FlowLayout;
importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JPanel;publicclassTestGUI{publicstaticvoidmain(String[]args){JFramef=newJFrame("LoL");f.setSize(400,300);f.setLocation(200,200);f.setLayout(null);JPanelp1=newJPanel();//设置面板大小p1.setBounds(50,50,300,60);//设置面板背景颜色p1.setBackground(Color.RED);//这一句可以没有,因为JPanel默认就是采用的FlowLayoutp1.setLayout(newFlowLayout());JButtonb1=newJButton("英雄1");JButtonb2=newJButton("英雄2");JButtonb3=newJButton("英雄3");//把按钮加入面板p1.add(b1);p1.add(b2);p1.add(b3);JPanelp2=newJPanel();JButtonb4=newJButton("英雄4");JButtonb5=newJButton("英雄5");JButtonb6=newJButton("英雄6");p2.add(b4);p2.add(b5);p2.add(b6);p2.setBackground(Color.BLUE);p2.setBounds(10,150,300,60);//把面板加入窗口f.add(p1);f.add(p2);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);}}
2ContentPanel
JFrame上有一层面板,叫做ContentPane
平时通过f.add()向JFrame增加组件,其实是向JFrame上的ContentPane加东西
importjavax.swing.JButton;
importjavax.swing.JFrame;publicclassTestGUI{publicstaticvoidmain(String[]args){JFramef=newJFrame("LoL");f.setSize(400,300);f.setLocation(200,200);f.setLayout(null);JButtonb=newJButton("一键秒对方基地挂");b.setBounds(50,50,280,30);f.add(b);//JFrame上有一层面板,叫做ContentPane//平时通过f.add()向JFrame增加组件,其实是向JFrame上的ContentPane加东西//f.add等同于f.getContentPane().add(b);f.getContentPane().add(b);//b.getParent()获取按钮b所处于的容器//打印出来可以看到,实际上是ContentPane而非JFrameSystem.out.println(b.getParent());f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);}}
3SplitPanel
创建一个水平JSplitPane,左边是pLeft,右边是pRight
importjava.awt.Color;
importjava.awt.FlowLayout;
importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.JSplitPane;publicclassTestGUI{publicstaticvoidmain(String[]args){JFramef=newJFrame("LoL");f.setSize(400,300);f.setLocation(200,200);f.setLayout(null);JPanelpLeft=newJPanel();pLeft.setBounds(50,50,300,60);pLeft.setBackground(Color.RED);pLeft.setLayout(newFlowLayout());JButtonb1=newJButton("盖伦");JButtonb2=newJButton("提莫");JButtonb3=newJButton("安妮");pLeft.add(b1);pLeft.add(b2);pLeft.add(b3);JPanelpRight=newJPanel();JButtonb4=newJButton("英雄4");JButtonb5=newJButton("英雄5");JButtonb6=newJButton("英雄6");pRight.add(b4);pRight.add(b5);pRight.add(b6);pRight.setBackground(Color.BLUE);pRight.setBounds(10,150,300,60);//创建一个水平JSplitPane,左边是p1,右边是p2JSplitPanesp=newJSplitPane(JSplitPane.HORIZONTAL_SPLIT,pLeft,pRight);//设置分割条的位置sp.setDividerLocation(80);//把sp当作ContentPanef.setContentPane(sp);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);}}
4JScrollPanel
使用带滚动条的面板有两种方式
- 在创建JScrollPane,把组件作为参数传进去
JScrollPanesp=newJScrollPane(ta);
2希望带滚动条的面板现实其他组件的时候,调用setViewportView
sp.setViewportView(ta);
importjavax.swing.JFrame;
importjavax.swing.JScrollPane;
importjavax.swing.JTextArea;
publicclassTestGUI{publicstaticvoidmain(String[]args){JFramef=newJFrame("LoL");f.setSize(400,300);f.setLocation(200,200);f.setLayout(null);//准备一个文本域,在里面放很多数据JTextAreata=newJTextArea();for(inti=0;i<1000;i++){ta.append(String.valueOf(i));}//自动换行ta.setLineWrap(true);JScrollPanesp=newJScrollPane(ta);f.setContentPane(sp);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);}}
5TabbedPanel
importjava.awt.Color;
importjava.awt.FlowLayout;importjavax.swing.ImageIcon;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.JTabbedPane;publicclassTestGUI{publicstaticvoidmain(String[]args){JFramef=newJFrame("LoL");f.setSize(400,300);f.setLocation(200,200);f.setLayout(null);JPanelp1=newJPanel();p1.setBounds(50,50,300,60);p1.setBackground(Color.RED);p1.setLayout(newFlowLayout());JButtonb1=newJButton("英雄1");JButtonb2=newJButton("英雄2");JButtonb3=newJButton("英雄3");p1.add(b1);p1.add(b2);p1.add(b3);JPanelp2=newJPanel();JButtonb4=newJButton("英雄4");JButtonb5=newJButton("英雄5");JButtonb6=newJButton("英雄6");p2.add(b4);p2.add(b5);p2.add(b6);p2.setBackground(Color.BLUE);p2.setBounds(10,150,300,60);JTabbedPanetp=newJTabbedPane();tp.add(p1);tp.add(p2);//设置tab的标题tp.setTitleAt(0,"红色tab");tp.setTitleAt(1,"蓝色tab");ImageIconi=newImageIcon("e:/project/j2se/j.png");tp.setIconAt(0,i);tp.setIconAt(1,i);f.setContentPane(tp);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);}}
6CardLayerout
CardLayerout布局器很像TTabbedPanel,在本例里面上面是一个下拉框,下面是一个CardLayerout的JPanel
这个JPanel里有两个面板,可以通过CardLayerout方便的切换
importjava.awt.BorderLayout;
importjava.awt.CardLayout;
importjava.awt.event.ItemEvent;importjava.awt.event.ItemListener;importjavax.swing.JButton;importjavax.swing.JComboBox;importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.JTextField;publicclassTestGUI{publicstaticvoidmain(String[]args){JFramef=newJFrame("CardLayerout");JPanelcomboBoxPane=newJPanel();StringbuttonPanel="按钮面板";StringinputPanel="输入框面板";StringcomboBoxItems[]={buttonPanel,inputPanel};JComboBox<String>cb=newJComboBox<>(comboBoxItems);comboBoxPane.add(cb);//两个Panel充当卡片JPanelcard1=newJPanel();card1.add(newJButton("按钮1"));card1.add(newJButton("按钮2"));card1.add(newJButton("按钮3"));JPanelcard2=newJPanel();card2.add(newJTextField("输入框",20));JPanelcards;//apanelthatusesCardLayoutcards=newJPanel(newCardLayout());cards.add(card1,buttonPanel);cards.add(card2,inputPanel);f.add(comboBoxPane,BorderLayout.NORTH);f.add(cards,BorderLayout.CENTER);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setSize(250,150);f.setLocationRelativeTo(null);f.setVisible(true);cb.addItemListener(newItemListener(){@OverridepublicvoiditemStateChanged(ItemEventevt){CardLayoutcl=(CardLayout)(cards.getLayout());cl.show(cards,(String)evt.getItem());}});}}
本文内容总结:组件,1标签,2使用JLabel显示图片,3按钮,4复选框,5单选框,6按钮组,7下拉框,8对话框,9文本框,10密码框,11文本域,12进度条,13文件选择器,面板,1基本面板,2ContentPanel,3SplitPanel,4JScrollPanel,5TabbedPanel,6CardLayerout,
原文链接:https://www.cnblogs.com/mrdz/p/7716643.html