Java菜鸡的学习日常——JFrame基础操作(1)
在下第一次接触java是20年寒假前实验室的学长给了我一个做安卓开发的任务,在学过一些java基础后就直接去看了Android Studio的相关教程,但在学习过程中确实遇到了很多基础性的问题,所以就下定决心,痛改前非、重看java了。
这次对于JFrame的心血来潮,大概也是想再建立起对android的认知吧。
所以这里的代码可能不像前几次那样有奇奇怪怪的注释,因为JFrame的操作确实让我觉得异常熟悉。
此外,文件中调用了一些图片,这个URL应用起来就不大一样了,目前我的主力机是一台MAC所以URL的写法***好像***和WINDOW下的不太一样。
至于图片文件,在这里就建议大家前往阿里巴巴的矢量图标库去寻找喽。
好了不啰嗦了,上代码:
package Swing;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
public class MyJFrame_JD extends JFrame {
public static void main(String[] args) {
// new MyJFrame_JD().MyFrame();
// new MyImageIcon();
// new AbsolutePosition();
// new MyJFrame_JD().MyFlowLayoutPosition();
// new MyJFrame_JD().MyJScrollPane();
// new MyJFrame_JD().MyJButton();
}
//JRadioButton与ButtonGroup
//滚动条面板JScrollPane
public void MyJScrollPane(){
JFrame frame = new JFrame();
JTextArea textArea = new JTextArea();//文本区域组件
JScrollPane scrollPane = new JScrollPane(textArea);//滚动面板
Container c = frame.getContentPane();
c.add(scrollPane);
frame.setVisible(true);
frame.setBounds(80,90,800,600);
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
}
//绘制一个JPanel面板
public void MyJPanel(){
JFrame frame = new JFrame();
JPanel panel = new JPanel();
Container c = frame.getContentPane();
frame.setTitle("一个花里胡哨的窗口");
frame.setSize(1000,600);
frame.setLocation(200,200);
frame.setVisible(true);
frame.setResizable(false);//设置窗口大小不可改变
panel.setSize(1000,600);
panel.setVisible(true);
panel.setBackground(new Color(200,189,99));
c.add(panel);
}
//button添加监听事件,开启子窗口
public void MyFrame(){
javax.swing.JFrame jFrame = new javax.swing.JFrame();//实例化一个JFrame对象
jFrame.setVisible(true);//使窗体可视
jFrame.setSize(1200,500);
Container container_main = jFrame.getContentPane();//创建一个容器
container_main.setLayout(null);//取消布局管理器
JLabel jLabel = new JLabel("这是一个JFrame窗体");
jLabel.setHorizontalAlignment(SwingConstants.CENTER);
container_main.add(jLabel);
JButton jButton = new JButton("弹出对话框");
JButton jButton_2 = new JButton("一个实验框");
jButton.setBounds(10,10,200,200);
jButton_2.setBounds(220,10,200,200);
//为按钮添加点击事件
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//使MyDialog窗体可见
new MyJD(MyJFrame_JD.this).setVisible(true);
}
});
//将按钮添加到容器中
container_main.add(jButton);
container_main.add(jButton_2);
}
//流布局管理器
public void MyFlowLayoutPosition(){
JFrame JF = new JFrame();
JF.setTitle("流布局管理器");
JF.setSize(300,300);
Container container = JF.getContentPane();
JF.setLayout(new FlowLayout(0,10,10));
for (int i = 0; i < 10; i++) {
container.add(new JButton("button"+i));
}
JF.setVisible(true);
}
//JButton
public void MyJButton(){
URL url = Swing.class.getResource("anniu.png");
Icon icon = new ImageIcon(url);
setLayout(new GridLayout(4,2,5,5));//设置网格布局管理器
Container contentPane = getContentPane();
for (int i = 0; i < 6; i++) {
JButton button = new JButton("button" + i,icon);
contentPane.add(button);
if (i%3 == 0){
button.setEnabled(false);//设置按键不可用
}
}
JButton jB = new JButton();
jB.setMaximumSize(new Dimension(64,33));//设置按钮与图片相同大小??????不是很懂怎么看图片大小
jB.setIcon(icon);
jB.setHideActionText(true);
jB.setToolTipText("图片按钮");//按钮提示
jB.setBorderPainted(false);//按钮边界不显示
jB.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//弹出确认对话框
JOptionPane.showMessageDialog(null,"弹出对话框");
}
});
contentPane.add(jB);
setSize(600,600);
setVisible(true);
}
}
class MyJD extends JDialog{
public MyJD(MyJFrame_JD frame){
//实例化一个JDialog类对象,指定对话框的父窗体、标题、类型
super(frame,"第一个JDialog窗体",true);
Container container = getContentPane();
JLabel label = new JLabel("这是一个对话框");
container.add(label);
label.setHorizontalAlignment(SwingConstants.CENTER);
setBounds(120,120,600,300);//设置对话框窗体大小
}
}
class DrawICon implements Icon{
private int width=100,height=100;
@Override
public void paintIcon(Component c, Graphics g, int x, int y) {
g.fillOval(x,y,width,height);//绘制一个图形
}
@Override
public int getIconWidth() {
return this.width;
}
@Override
public int getIconHeight() {
return this.height;
}
public DrawICon(int width,int height){
this.width = width;
this.height = height;
}
//以下是JLabel标签(绘图,不是插入图片)的应用代码
// DrawICon drawICon = new DrawICon(30,30);
// JLabel label = new JLabel("test",drawICon,SwingConstants.CENTER);
// JFrame frame = new JFrame();
// Container container_jl = frame.getContentPane();
// frame.setVisible(true);
// frame.setSize(500,500);
// container_jl.add(label);
}
class MyImageIcon extends JFrame{
public MyImageIcon(){
JFrame jFrame = new JFrame("这里是标题呀");
ImageIcon background = new ImageIcon(Swing.class.getResource("BiaoQian.png"));
background.setImage(background.getImage().
getScaledInstance(background.getIconWidth(),background.getIconHeight(), Image.SCALE_DEFAULT));
Container container = jFrame.getContentPane();
JLabel label = new JLabel("这是一个标签图标",JLabel.CENTER);
label.setIcon(background);
//获取图片所在的URL
Icon icon=new ImageIcon("src/Swing/BiaoQian.png");//实例化Icon对象,同时设置图片位置
label.setIcon(icon);//为标签设置图片
label.setHorizontalAlignment(0);
label.setOpaque(true);
container.add(label);
jFrame.setSize(500,500);
jFrame.setVisible(true);
}
}
class AbsolutePosition extends JFrame{
public AbsolutePosition(){
setTitle("绝对布局");//设置窗体标题
setLayout(null);
setBounds(50,50,500,500);
Container c = getContentPane();//创建容器对象
JButton jb_1 = new JButton("按钮1");
JButton jb_2 = new JButton("按钮2");
jb_1.setBounds(0,0,50,50);
jb_2.setBounds(100,100,100,50);
c.add(jb_1);
c.add(jb_2);
setVisible(true);
//设置窗体关闭模式(不设置好像也可以)
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
大家可以把要用的图片直接放到src的package里面,和代码放到一起(像这样):
运行结果我就不放出来了,都是一些窗口,大家可以自己去试着做一下。