import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.*;
public class testI extends JFrame{
PanelI panel1,panel2,panel3,panel4;
testI(){
new JFrame_Show(this, "测试坐标");
setLayout(new GridLayout(2, 2,5,5));
panel1 = new PanelI();panel2 = new PanelI();panel3 = new PanelI();panel4 = new PanelI();
panel1.setBackground(new Color(206,180,176));panel4.setBackground(new Color(206,180,176));
panel1.setBackground(new Color(177,137,245));panel4.setBackground(new Color(177,137,245));
add(panel1);add(panel2);add(panel3);add(panel4);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
SwingUtilities.invokeLater(() ->{
new testI().setVisible(true);
});
}
private class PanelI extends JPanel{
int x=0;
int y=0;
String s="X:0 Y:0";
PanelI(){
setBorder(BorderFactory.createLineBorder(Color.RED));
addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseMoved(MouseEvent e) {
// TODO Auto-generated method stub
x=e.getX();
y = e.getY();
s="X: "+x+" Y: "+y;
repaint();
}
@Override
public void mouseDragged(MouseEvent e) {
// TODO Auto-generated method stub
}
});
}
@Override
protected void paintComponent(Graphics g) {
// TODO Auto-generated method stub
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.setColor(Color.RED);
g2.setFont(new Font("楷体", Font.BOLD, 24));
g2.drawString(s, 10, 50);
}
}
@Override
public void paint(Graphics g) {
// TODO Auto-generated method stub
super.paint(g);
Graphics2D g2 =(Graphics2D)g;
g2.setColor(Color.RED);
g2.setFont(new Font("楷体", Font.BOLD, 24));
g2.drawString("测试", 300, 300);
}
}
效果
setBorder()
:这是给组件(比如你的面板)设置边框的方法,就像给相框加个边框一样BorderFactory.createTitledBorder("hello")
:这是工厂(Factory)生产了一个带标题的边框,标题是"hello"
BorderFactory
是什么?
想象一下 BorderFactory
就像一个边框工厂,专门生产各种款式的边框:
- 它是Swing框架中的一个工具类
- 就像乐高工厂生产各种积木一样,它生产各种边框
- 好处是:你不用自己从头造边框,直接"下单"就能得到现成的
边框工厂能生产哪些产品?
这个工厂可厉害了,能生产多种"边框款式":
-
普通边框:
createLineBorder(Color.RED)
- 红色实线边框createEtchedBorder()
- 3D凹陷效果的边框
-
带标题的边框:
createTitledBorder("标题")
- 就是你用的这种,带文字说明- 可以设置标题位置、字体、颜色等
-
花式边框:
createRaisedBevelBorder()
- 凸起的3D边框createLoweredBevelBorder()
- 凹陷的3D边框createMatteBorder()
- 可以设置不同宽度的边框
-
组合边框:
createCompoundBorder()
- 可以把两个边框组合在一起,像三明治一样
记住:BorderFactory
就像边框界的"宜家",想要什么边框款式,直接去"买"就行,不用自己动手做!