java_day12
目标:Java web开发
开始磨day6发的象棋程序。
从大佬博客抄到eclipses上效果是这样:
引入package后第一句话是这个:
好,这个我不会qwq。
于是。。。
Swing是Java为图形界面应用开发提供的一组工具包(GUI工具包),是Java基础类的一部分。
Swing包含两种元素:组件(比如按钮)和容器(用来包含组件)。
容器分为顶层容器(JFrame,JApplet,JWindow,JDialog四个,不能被其他容器包含)和中间层容器(必须被其他容器包含)。
JFrame组件应用(下面的代码当然是project的包的一部分,和其他class一起发挥作用):
import javax.swing.*;
class SwingDemo {
private static void createAndShowGUI() {
JFrame jfrm = new JFrame("情书");//建立JFrame容器,命名为“情书”
jfrm.setSize(256, 128);//设置窗口高度和宽度
jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口关闭后会发生什么———关闭应用程序
/*还可以写另外三个参数
JFrame.DISPOSE_ON_CLOSE
JFrame.HIDE_ON_CLOSE
JFrame.DO_NOTHING_ON_CLOSE
*默认情况下,该参数为 HIDE_ON_CLOSE
*也就是说点击窗口关闭后应用程序还是处于运行状态,在后台进程中还可以看到
*/
JLabel jlab = new JLabel("P ZQAE TQR");//建立标签组件jlab,内容为“P ZQAE TQR”
jfrm.getContentPane().add(jlab);//把组件加到容器里
jfrm.setVisible(true);//显示容器
}
public static void main(String args[]) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
/*因为从不同的线程中访问同一个数据会造成数据出现问题
main函数是一个线程
界面操作是事件派发线程,是另一个不同的线程
所以要将main函数这个线程转到“事件派发线程”访问Swing对象
invokeLater方法会将代码转到事件派发线程中来执行:SwingUtilities.invokeLater(Runnable类的对象)
这里用了定义匿名内部类的写法,它会创建一个匿名对象,该对象实现了Runnable接口
*/
}
}
效果是这个:好像还不错哈哈
BorderLayout和FLowLayout布局:
import java.awt.*;//layout需要用到awt,抽象窗口工具包
import javax.swing.*;
class LayoutDemo{
private static void addComponentsToPane(Container pane){
// content pane默认是BorderLayout,因此这里可以省略
//pane.setLayout(new BorderLayout());
JButton button = new JButton("PAGE_START");
pane.add(button, BorderLayout.PAGE_START);
button = new JButton("CENTER");
button.setPreferredSize(new Dimension(200, 100));//设置按钮大小
pane.add(button, BorderLayout.CENTER);
button = new JButton("LINE_START");
pane.add(button, BorderLayout.LINE_START);
button = new JButton("PAGE_END");
pane.add(button, BorderLayout.PAGE_END);
button = new JButton("LINE_END");
pane.add(button, BorderLayout.LINE_END);
//上下左右中五个位置放五个组件,这里是五个按钮
/*还可以这么写,用FlowLayout
pane.setLayout(new FlowLayout());
pane.add(new JButton("111111111111"));
pane.add(new JButton("2"));
pane.add(new JButton("33333"));
pane.add(new JButton("44444"));
pane.add(new JButton("55"));
*/
}
private static void createAndShowGUI() {
JFrame frame = new JFrame("BorderLayout");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
addComponentsToPane(frame.getContentPane());//返回值为Containter类型的
frame.pack();//根据子容器大小调整大小,没有这句代码的话,默认大小为0
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
public void run(){
createAndShowGUI();
}
});
}
}
效果是这个:
还有