1.gridlayoutgroup Դ??
2.JAVA课程设计计算器的源代码
3.Unity的拖拽与摆放问题(实现简易拼图小游戏)
4.Unity3D MMORPG背包系统的设计与实现详解
5.Qt官方示例翻译--Group Box Example
6.java编译文本编辑器
gridlayoutgroup Դ??
ScrollView滑动效果在游戏开发中扮演重要角色,但对许多同学而言,掌握其技巧并不容易。让我们一起来探讨如何制作ScrollView。
开始制作之前,我们需要在场景中创建一个空节点,越狱后安装源码作为界面的父节点。
接着,创建名为SV的空节点,其区域大小预估为滑动区域(即显示物体的区域),如图所示。
随后,构建名为ScrollRect的空节点,其区域如下图所示。
在ScrollRect右侧加入ScrollRect组件。
接着,加入名为ViewPort的空节点,其区域大小与需添加的组件如图。
继续构建名为Content的linux 1.3 内存源码空节点,添加的组件如图。
Item登场,我们先观察一下它的样式:
将多个Item复制,并放入Content下面。
此时,发现的背景似乎被缩短了。接下来,点击Content调整GridLayoutGroup中的CellSize尺寸,这是控制每个Item尺寸的参数。
调整另一个参数,以获得所需效果。
接下来,根据实际需求(例如,若为两列,则填2),调整对应的GridLayoutGroup参数。
下图展示了Spacing,即每个Item之间的pyton小说爬虫源码间隔。
接着,将Content和ViewPort拖至相应位置。
最后,取消水平滑动功能,因为我们关注的是垂直滑动。
完成以上步骤后,即可实现滑动效果。
JAVA课程设计计算器的源代码
比较完整的Java计算器
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
public class calculator extends JFrame implements ActionListener
{ //这里我把JFrame写成Frame,这个错误找了好久
JFrame frame;
private JButton jia=new JButton("+");
private JButton jian=new JButton("-");
private JButton cheng=new JButton("*");
private JButton chu=new JButton("/");
private JButton qiuyi=new JButton("%");
private JButton deng=new JButton("=");
private JButton fu=new JButton("+/-");
private JButton dian=new JButton(".");
private JButton kai=new JButton("sqrt");
private JButton diao=new JButton("1/x");
private JButton aa=new JButton("A");
private JButton bb=new JButton("B");
private JButton cc=new JButton("C");
private JButton dd=new JButton("D");
private JButton ee=new JButton("E");
private JButton ff=new JButton("F");
private TextField k1=new TextField();
private objConversion convert = new objConversion();
JMenuItem copy,paste,s,t,help,about,me;
JRadioButton sixteen,ten,eight,two;
JButton backspace,ce,c,num0,num1,num2,num3,num4,num5,num6,num7,num8,num9;
Container cp;
JTextField text;
String copycontent="";
boolean clickable=true,clear=true;
int all=0;
double qian;
String fuhao;
int jin=,first=1;
public calculator()
{
setTitle("计算器-杨彩制作");
setSize(,);
setLocation(,);
text=new JTextField();
// text.setEnabled(false);
text.setText("0.");
text.setHorizontalAlignment(JTextField.RIGHT);//从右到左
JPanel cp1=new JPanel();
JPanel cp2=new JPanel();
JPanel cp3=new JPanel();
cp=getContentPane();
cp.add(cp1,"North");
cp.add(cp2,"Center");
cp.add(cp3,"South");
cp1.setLayout(new GridLayout(1,6));
cp2.setLayout(new GridLayout(2,4));
cp3.setLayout(new GridLayout(6,6));
sixteen=new JRadioButton("十六进制");
sixteen.setVisible(false);
ten=new JRadioButton("十进制",true);
ten.setVisible(false);
eight=new JRadioButton("八进制");
eight.setVisible(false);
two=new JRadioButton("二进制");
two.setVisible(false);
sixteen.addActionListener(this);
ten.addActionListener(this);
eight.addActionListener(this);
two.addActionListener(this);
ButtonGroup btg=new ButtonGroup();
btg.add(sixteen);
btg.add(ten);
btg.add(eight);
btg.add(two);
JTextField t3=new JTextField();
cp1.add(text);
// text.setEnabled(false);
text.setEditable(false);
text.setBackground(new Color(, , ));
cp2.add(sixteen);
cp2.add(ten);
cp2.add(eight);
cp2.add(two);
backspace=new JButton("Backspace");
backspace.setForeground(new Color(,0,0));
backspace.addActionListener(this);
ce=new JButton("CE");
ce.setForeground(new Color(,0,0));
ce.addActionListener(this);
c=new JButton("C");
c.setForeground(new Color(,0,0));
c.addActionListener(this);
k1.setVisible(false);
cp2.add(k1);
cp2.add(backspace);
cp2.add(ce);
cp2.add(c);
num0=new JButton("0");
num1=new JButton("1");
num2=new JButton("2");
num3=new JButton("3");
num4=new JButton("4");
num5=new JButton("5");
num6=new JButton("6");
num7=new JButton("7");
num8=new JButton("8");
num9=new JButton("9");
cp3.add(num7);
num7.addActionListener(this);
cp3.add(num8);
num8.addActionListener(this);
cp3.add(num9);
num9.addActionListener(this);
cp3.add(chu);
chu.setForeground(new Color(,0,0));
chu.addActionListener(this);
cp3.add(kai);
kai.addActionListener(this);
cp3.add(num4);
num4.addActionListener(this);
cp3.add(num5);
num5.addActionListener(this);
cp3.add(num6);
num6.addActionListener(this);
cp3.add(cheng);
cheng.setForeground(new Color(,0,0));
cheng.addActionListener(this);
cp3.add(qiuyi);
qiuyi.addActionListener(this);
cp3.add(num1);
num1.addActionListener(this);
cp3.add(num2);
num2.addActionListener(this);
cp3.add(num3);
num3.addActionListener(this);
cp3.add(jian);
jian.setForeground(new Color(,0,0));
jian.addActionListener(this);
cp3.add(diao);
diao.addActionListener(this);
cp3.add(num0);
num0.addActionListener(this);
cp3.add(fu);
fu.addActionListener(this);
cp3.add(dian);
dian.addActionListener(this);
cp3.add(jia);
jia.setForeground(new Color(,0,0));
jia.addActionListener(this);
cp3.add(deng);
deng.setForeground(new Color(,0,0));
deng.addActionListener(this);
cp3.add(aa);
aa.addActionListener(this);
cp3.add(bb);
bb.addActionListener(this);
cp3.add(cc);
cc.addActionListener(this);
cp3.add(dd);
dd.addActionListener(this);
cp3.add(ee);
ee.addActionListener(this);
cp3.add(ff);
ff.addActionListener(this);
aa.setVisible(false);
bb.setVisible(false);
cc.setVisible(false);
dd.setVisible(false);
ee.setVisible(false);
ff.setVisible(false);
JMenuBar mainMenu = new JMenuBar();
setJMenuBar(mainMenu);
JMenu editMenu = new JMenu("编辑");
JMenu viewMenu = new JMenu("查看");
JMenu helpMenu = new JMenu("帮助");
mainMenu.add(editMenu);
mainMenu.add(viewMenu);
mainMenu.add(helpMenu);
copy = new JMenuItem(" 复制");
paste = new JMenuItem(" 粘贴");
KeyStroke copyks=KeyStroke.getKeyStroke(KeyEvent.VK_C,Event.CTRL_MASK);
copy.setAccelerator(copyks);//设置退出菜单选项加上快捷键
KeyStroke pasteks=KeyStroke.getKeyStroke(KeyEvent.VK_V,Event.CTRL_MASK);
paste.setAccelerator(pasteks);//设置退出菜单选项加上快捷键
editMenu.add(copy);
editMenu.add(paste);
copy.addActionListener(this);
paste.addActionListener(this);
t = new JMenuItem("●标准型");
s = new JMenuItem(" 科学型");
viewMenu.add(t);
viewMenu.add(s);
t.addActionListener(this);
s.addActionListener(this);
help = new JMenuItem(" 帮助主题");
about = new JMenuItem(" 关于计算器");
me = new JMenuItem(" 作者主页");
helpMenu.add(help);
helpMenu.add(about);
helpMenu.add(me);
help.addActionListener(this);
about.addActionListener(this);
me.addActionListener(this);
addWindowListener(new WindowDestroyer());//结束窗口
}
public void actionPerformed(ActionEvent e)
{ //响应动作代码
if(first==1)
text.setText("");
first=0;//第一次把文本框0.清空
Object temp = e.getSource();
if(temp==copy)
{
copycontent = text.getText();
}
if(temp==paste)
{
text.setText(text.getText()+copycontent);
}
if(temp==t)
{ //标准
sixteen.setVisible(false);
ten.setVisible(false);
eight.setVisible(false);
two.setVisible(false);
t.setText("●标准型");
s.setText(" 科学型");
aa.setVisible(false);
bb.setVisible(false);
cc.setVisible(false);
dd.setVisible(false);
ee.setVisible(false);
ff.setVisible(false);
}
if(temp==s)
{ //科学
sixteen.setVisible(true);
ten.setVisible(true);
eight.setVisible(true);
two.setVisible(true);
t.setText(" 标准型");
s.setText("●科学型");
aa.setVisible(true);
bb.setVisible(true);
cc.setVisible(true);
dd.setVisible(true);
ee.setVisible(true);
ff.setVisible(true);
aa.setEnabled(false);
bb.setEnabled(false);
cc.setEnabled(false);
dd.setEnabled(false);
ee.setEnabled(false);
ff.setEnabled(false);
}
if(temp==help)
{ //打开系统帮助文件 要查资料
try
{
String filePath = "C:/WINDOWS/Help/calc.chm";
Runtime.getRuntime().exec("cmd.exe /c "+filePath);
}
catch(Exception eeee)
{
System.out.println("打开系统的计算器出错");
}
}
if(temp==about)
{
JOptionPane.showMessageDialog(frame," Java计算器\n 杨彩 制作\n\n /m/yangcai","关于计算器",JOptionPane.INFORMATION_MESSAGE); ;
}
if(temp==me)
{
try
{
Process p = Runtime.getRuntime().exec("explorer /m/yangcai");
}
catch(Exception eeee)
{
System.out.println("打开指定网页出错");
}
}
try
{
if(temp==sixteen)
{
String hex=text.getText();
int inthex=Integer.parseInt(hex,jin);//先把数变为进制
text.setText(convert.decHex(inthex)) ;
jin=;
aa.setEnabled(true);
bb.setEnabled(true);
cc.setEnabled(true);
dd.setEnabled(true);
ee.setEnabled(true);
ff.setEnabled(true);
num2.setEnabled(true);
num3.setEnabled(true);
num4.setEnabled(true);
num5.setEnabled(true);
num6.setEnabled(true);
num7.setEnabled(true);
num8.setEnabled(true);
num9.setEnabled(true);
}
if(temp==eight)
{
String oct =text.getText();
int intoct=Integer.parseInt(oct,jin);
text.setText(convert.decOct(intoct)) ;
jin=8;
aa.setEnabled(false);
bb.setEnabled(false);
cc.setEnabled(false);
dd.setEnabled(false);
ee.setEnabled(false);
ff.setEnabled(false);
num2.setEnabled(true);
num3.setEnabled(true);
num4.setEnabled(true);
num5.setEnabled(true);
num6.setEnabled(true);
num7.setEnabled(true);
num8.setEnabled(false);
num9.setEnabled(false);
}
if(temp==two)
{
String bin=text.getText();
int intbin=Integer.parseInt(bin,jin);
text.setText(convert.decBin(intbin));
jin=2;
aa.setEnabled(false);
bb.setEnabled(false);
cc.setEnabled(false);
dd.setEnabled(false);
ee.setEnabled(false);
ff.setEnabled(false);
num2.setEnabled(false);
num3.setEnabled(false);
num4.setEnabled(false);
num5.setEnabled(false);
num6.setEnabled(false);
num7.setEnabled(false);
num8.setEnabled(false);
num9.setEnabled(false);
}
if(temp==ten)
{
String dec=text.getText();
int intdec=Integer.parseInt(dec,jin);
// text.setText(convert.decDec(intdec)); //本句会把变成
text.setText(intdec+"");
jin=;
aa.setEnabled(false);
bb.setEnabled(false);
cc.setEnabled(false);
dd.setEnabled(false);
ee.setEnabled(false);
ff.setEnabled(false);
num2.setEnabled(true);
num3.setEnabled(true);
num4.setEnabled(true);
num5.setEnabled(true);
num6.setEnabled(true);
num7.setEnabled(true);
num8.setEnabled(true);
num9.setEnabled(true);
}
}
catch(Exception ee)
{
System.out.println("转换出错,可能你没有输入任何字符");
text.setText("转换出错");
clear=false;
}
if(temp==backspace)
{ //退格
String s = text.getText();
text.setText("");
for (int i = 0; i < s.length() - 1; i++)
{
char a = s.charAt(i);
text.setText(text.getText() + a);
}
}
if (temp==ce)
{
text.setText("0.");
clear=true;
first=1;
}
if (temp==c)
{
text.setText("0."); ;
clear=true;
first=1;
}
if(temp==num0)
{
if(clear==false)//判断是否点击了符号位
text.setText("");
text.setText(text.getText()+"0");
}
if(temp==num1)
{
if(clear==false)
text.setText("");
text.setText(text.getText()+"1");
clear=true;//第二次不在清空(前二句)
}
if(temp==num2)
{
if(clear==false)
text.setText("");
text.setText(text.getText()+"2");
clear=true;
}
if(temp==num3)
{
if(clear==false)
text.setText("");
text.setText(text.getText()+"3");
clear=true;
}
if(temp==num4)
{
if(clear==false)
text.setText("");
text.setText(text.getText()+"4");
clear=true;
}
if(temp==num5)
{
if(clear==false)
text.setText("");
text.setText(text.getText()+"5");
clear=true;
}
if(temp==num6)
{
if(clear==false)
text.setText("");
text.setText(text.getText()+"6");
clear=true;
}
if(temp==num7)
{
if(clear==false)
text.setText("");
text.setText(text.getText()+"7");
clear=true;
}
if(temp==num8)
{
if(clear==false)
text.setText("");
text.setText(text.getText()+"8");
clear=true;
}
if(temp==num9)
{
if(clear==false)
text.setText("");
text.setText(text.getText()+"9");
clear=true;
}
if(temp==aa)
{
text.setText(text.getText()+"A");
}
if(temp==bb)
{
text.setText(text.getText()+"B");
}
if(temp==cc)
{
text.setText(text.getText()+"C");
}
if(temp==dd)
{
text.setText(text.getText()+"D");
}
if(temp==ee)
{
text.setText(text.getText()+"E");
}
if(temp==ff)
{
text.setText(text.getText()+"F");
}
if(temp==dian)
{
clickable=true;
for (int i = 0; i < text.getText().length(); i++)
if ('.' == text.getText().charAt(i))
{
clickable=false;
break;
} //第一层判断是否里面含有小数点;
if(clickable==true)//第二坛判断
text.setText(text.getText()+".");
}
try
{
if(temp==jia)
{ //加法
qian=Double.parseDouble(text.getText());
fuhao="+";
clear=false;
}
if(temp==jian)
{
qian=Double.parseDouble(text.getText());
fuhao="-";
clear=false;
;
}
if(temp==cheng)
{
qian=Double.parseDouble(text.getText());
fuhao="*";
clear=false;
}
if(temp==chu)
{
qian=Double.parseDouble(text.getText());
fuhao="/";
clear=false;
}
if(temp==deng)
{
double ss=Double.parseDouble(text.getText());
text.setText("");
if(fuhao=="+")
text.setText(qian+ss+"");
if(fuhao=="-")
text.setText(qian-ss+"");
if(fuhao=="*")
text.setText(qian*ss+"");
if(fuhao=="/")
text.setText(qian/ss+"");
clear=false;//要清空前一次的数据
;
}
if(temp==kai)
{
String s = text.getText();
if (s.charAt(0) == '-')
{
text.setText("负数不能开根号");
}
else
text.setText(Double.toString(java.lang.Math.sqrt(Double.parseDouble(text.getText()))));
clear=false;
}
if(temp==diao)
{
if (text.getText().charAt(0) == '0'&&text.getText().length() == 1)
{
text.setText("除数不能为零");
}
else
{
boolean isDec = true;
int i, j, k;
String s = Double.toString(1 / Double.parseDouble(text.getText()));
for (i = 0; i < s.length(); i++)
if (s.charAt(i) == '.')
break;
for (j = i + 1; j < s.length(); j++)
if (s.charAt(j) != '0')
{
isDec = false;
break;
}
if (isDec == true)
{
String stemp = "";
for (k = 0; k < i; k++)
stemp += s.charAt(k);
text.setText(stemp);
}
else
text.setText(s);
}
clear=false;
}
if(temp==qiuyi)
{
text.setText("0");
clear=false;
}
if (temp == fu)
{ //导师,此方法参考书中例子
boolean isNumber = true;
String s = text.getText();
for (int i = 0; i < s.length(); i++)
if (! (s.charAt(i) >= '0' && s.charAt(i) <= '9' || s.charAt(i) == '.' ||
s.charAt(i) == '-'))
{
isNumber = false;
break;
}
if (isNumber == true)
{
//如果当前字符串首字母有'-'号,代表现在是个负数,再按下时,则将首符号去掉
if (s.charAt(0) == '-')
{
text.setText("");
for (int i = 1; i < s.length(); i++)
{
char a = s.charAt(i);
text.setText(text.getText() + a);
}
}
//如果当前字符串第一个字符不是符号,则添加一个符号在首字母处
else
text.setText('-' + s);
}
}
}
catch(Exception eee)
{
System.out.println("运算时,首先输入数字或字符");
text.setText("运算出错");
clear=false;
}
}
class WindowDestroyer extends WindowAdapter
{ //退出窗口动作
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
class objConversion
{ //导师,本进制类参考了CSMD类转换例子
public void objConversion ()
{
}
public String decDec (int decNum)
{ //
String strDecNum = Integer.toString(decNum);
for (int i = strDecNum.length(); i < 3; i++)
{
strDecNum = "0" + strDecNum;
}
// return strDecNum;
return invert (strDecNum, 5);
}
public String decHex (int decNum)
{ // to
String strHexNum = "";
int currentNum = 0;
while (decNum != 0)
{
if (decNum > )
{
currentNum = decNum % ;
decNum /= ;
}
else
{
currentNum = decNum;
decNum = 0;
}
switch (currentNum)
{
case : strHexNum += "F";
break;
case : strHexNum += "E";
break;
case : strHexNum += "D";
break;
case : strHexNum += "C";
break;
case : strHexNum += "B";
break;
case : strHexNum += "A";
break;
default: strHexNum += Integer.toString(currentNum);
break;
}
}
return invert (strHexNum, 2);
}
public String decOct (int decNum)
{ // to 8
String strOctNum = "";
while (decNum != 0)
{
if (decNum > 7)
{
strOctNum += Integer.toString(decNum % 8);
decNum /= 8;
}
else
{
strOctNum += Integer.toString(decNum);
decNum = 0;
}
}
return invert (strOctNum, 3);
}
public String decBin (int decNum)
{ // to 2
String strBinNum = "";
while (decNum != 0)
{
if (decNum > 1)
{
strBinNum += Integer.toString(decNum % 2);
decNum /= 2;
}
else
{
strBinNum += Integer.toString(decNum);
decNum = 0;
}
}
return invert (strBinNum, 8);
}
private String invert (String strNum, int minLength) //转换长度
{
String answer = "";
int length = strNum.length();
if (length < minLength)
{
for (int padding = (minLength - length); padding > 0; padding--)
{
answer += "0";
}
}
for (int i = length; i > 0; i--)
{
answer += strNum.charAt (i - 1);
}
return answer;
}
}
public static void main(String arg[])//产生窗口
{
calculator win = new calculator();
win.setVisible(true);
}
}
Unity的拖拽与摆放问题(实现简易拼图小游戏)
首先展示效果,视频中可以看到可以被拖动,并自动吸附至白色方框内,同时若目标区域内已有,可实现互换位置。实现此效果的步骤如下:
新建项目,创建名为BG的Panel作为背景,下设名为PicBg的java坦克源码运行image组件用于摆放,并添加GridLayoutGroup组件。圈出的部分代表每个方块的大小。
接着,创建一个Prefab作为摆放的载体。此Prefab包含按钮和,通过识别鼠标所在父亲的位置进行判断,实现逻辑较为复杂,具体实现方式将在后续步骤中详解。
复制9个Prefab,统一命名为Slot,并通过GridLayoutGroup调整它们的位置。为使PicBg大小适合放置9个Slot,PicBg的大小应调整为*。
在PicBg下方创建摆放的位置,并统一大小为。最终效果如图所示。
核心部分实现如下:引入UnityEngine.EventSystems库,利用IBeginDragHandler、魔兽世界as源码IDragHandler、IEndDragHandler接口。实现鼠标点击时,跟随鼠标移动,并变更父节点以避免遮挡,不拖动时恢复原状态。
接下来是位置互换实现。通过创建三层关系:->Item->Slot。确定目标位置和初始位置后,交换在各自父亲节点的位置,从而实现互换。具体代码实现和逻辑说明见代码注释。
脚本挂载于上,结合Canvas Group组件用于识别下方元素类型,实现不同效果。至此,简单拼图小游戏完成。
Unity3D MMORPG背包系统的设计与实现详解
Unity3D的MMORPG背包系统设计与实现详解
在大型多人在线角色扮演游戏(MMORPG)中,背包系统扮演着核心角色,它允许玩家妥善管理其游戏内的物品。本文将深入剖析Unity3D中背包系统的设计和实现过程。
首先,设计背包系统时,需关注关键要素。背包界面应简洁且功能齐全,包括足够的格子(根据物品种类和数量确定),可选的美观排列方式,清晰易辨的物品图标,以及详细物品信息的展示。此外,物品存储和管理也至关重要,包括区分背包和仓库的存储方式,以及整理、排序、搜索等操作的实现。
在Unity3D中,实际实现背包系统的方法包括:创建背包界面的UI元素,如使用GridLayoutGroup布置格子,Image显示背景,Text显示数量,Button处理点击事件;利用List存储和管理物品,Item类封装物品信息,Inventory类承载背包数据;以及通过触发器实现物品的使用,如UseItem方法执行物品效果。
总之,Unity3D的背包系统设计需要精细考虑用户交互体验,而实现则依赖于UGUI、List和触发器等工具。通过本文,开发者应能对在Unity3D中创建和管理MMORPG背包系统有更深入的理解。
Qt官方示例翻译--Group Box Example
Qt官方示例翻译--Group Box Example
这个示例教程对初学者非常友好,特别是对那些希望通过跟随小豆君学习Qt官方示例来提升技能的同学,让我们共同学习和进步。 Group Box是Qt中用于合理组织和管理按钮交互的容器组件。它常用于将checkButton和radioButton归类到一个单独的组中,演示了四种不同类型的GroupBox:单选框盒、非互斥组、可勾选的单选框盒以及pushbutton盒。 在Window类中,继承自QWidget,定义了四个函数来创建不同类型的GroupBox。构造函数中,运用QGridLayout布局管理这些GroupBox。每个函数负责创建并返回一个QGroupBox对象。 第一个组框包含三个单选按钮,初始时默认为单选模式,通过设置第一个按钮为选中确保至少有一个按钮被选中。 第二个组框为可检查状态,内部按钮需要先选中组框才能启用。它包含独立的单选按钮和复选框,确保始终有一个单选按钮被选中。 第三个组框采用扁平样式,适用于特定类型的对话框,内部复选框默认为非独占模式。 最后一个组框包含按钮,同样支持可校验功能,包括普通按钮、切换按钮和平面按钮,其中按钮可以展示弹出菜单。 总结部分,虽然作者水平有限,翻译可能存在疏漏,期待读者指正。更新内容将根据需要不定期更新。本示例没有使用UI文件,着重展示了LineEdit的输入和输出特性,具有很高的学习价值。java编译文本编辑器
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class EditorJFrame extends JFrame implements ActionListener, ItemListener, MouseListener
{
private JTextField text_size; //字号文本行
private JCheckBox checkbox_bold, checkbox_italic; //粗体、斜体复选框
private JButton button_cut, button_copy, button_paste; //剪切、复制、粘贴按钮
private JTextArea textarea; //文本区
private JPopupMenu popupmenu; //快捷菜单
private JDialog dialog; //出错提示对话框
private JLabel label_dialog; //对话框中的标签
public EditorJFrame()
{
super("文本编辑器"); //默认BorderLayout布局
this.setSize(,);
this.setLocation(,);
this.setDefaultCloseOperation(EXIT_ON_CLOSE); //单击窗口关闭按钮时,结束程序运行
textarea = new JTextArea("TextArea");
textarea.addMouseListener(this); //为文本区注册鼠标事件监听器
this.add(textarea); //文本区添加到框架的中部
JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT)); //面板为流布局,左对齐
this.add(panel,"North"); //面板添加到框架的北部
text_size = new JTextField("",);
panel.add(text_size);
text_size.addActionListener(this); //注册文本行的单击事件监听器
checkbox_bold = new JCheckBox("粗体"); //复选框
panel.add(checkbox_bold);
checkbox_bold.addItemListener(this); //注册复选框的选择事件监听器
checkbox_italic = new JCheckBox("斜体");
panel.add(checkbox_italic);
checkbox_italic.addItemListener(this);
this.addmyMenu(); //调用自定义方法,添加菜单
this.setVisible(true);
}
private void addmyMenu() //添加主菜单、快捷菜单、对话框
{
JMenuBar menubar = new JMenuBar(); //菜单栏
this.setJMenuBar(menubar); //框架上添加菜单栏
JMenu menu_file = new JMenu("文件"); //菜单
menubar.add(menu_file); //菜单栏中加入菜单
menu_file.add(new JMenuItem("打开")); //生成菜单项并加入到菜单
menu_file.add(new JMenuItem("保存"));
menu_file.addSeparator(); //加分隔线
JMenuItem menuitem_exit = new JMenuItem("退出");
menu_file.add(menuitem_exit);
menuitem_exit.addActionListener(this); //为菜单项注册单击事件监听器
JMenu menu_edit = new JMenu("编辑");
menubar.add(menu_edit);
JMenu menu_style = new JMenu("字形");
menu_style.add(new JCheckBoxMenuItem("粗体")); //复选菜单项
menu_style.add(new JCheckBoxMenuItem("斜体"));
menu_edit.add(menu_style); //菜单加入到菜单中成为二级菜单
JMenu menu_color = new JMenu("颜色");
menu_edit.add(menu_color);
ButtonGroup buttongroup = new ButtonGroup(); //按钮组
JRadioButtonMenuItem rbmi_red = new JRadioButtonMenuItem("红",true); //单选菜单项
buttongroup.add(rbmi_red); //单选菜单项添加到按钮组
menu_color.add(rbmi_red); //单选菜单项添加到菜单
JRadioButtonMenuItem rbmi_green = new JRadioButtonMenuItem("绿",true);
buttongroup.add(rbmi_green);
menu_color.add(rbmi_green);
JRadioButtonMenuItem rbmi_blue = new JRadioButtonMenuItem("蓝",true);
buttongroup.add(rbmi_blue);
menu_color.add(rbmi_blue);
menubar.add(new JMenu("帮助"));
popupmenu = new JPopupMenu(); //弹出式菜单对象
JMenuItem menuitem_cut = new JMenuItem("剪切");
menuitem_cut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK));//设置快捷键Ctrl+X
popupmenu.add(menuitem_cut); //加入剪切菜单项
menuitem_cut.addActionListener(this);
JMenuItem menuitem_copy = new JMenuItem("复制");
menuitem_copy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));//设置快捷键Ctrl+C
popupmenu.add(menuitem_copy);
menuitem_copy.addActionListener(this);
JMenuItem menuitem_paste = new JMenuItem("粘贴");
menuitem_paste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK));//设置快捷键Ctrl+V
popupmenu.add(menuitem_paste);
menuitem_paste.addActionListener(this);
textarea.add(popupmenu); //文本区添加快捷菜单
dialog = new JDialog(this,"提示");
dialog.setSize(,);
label_dialog = new JLabel("",JLabel.CENTER);
dialog.add(label_dialog);
dialog.setDefaultCloseOperation(HIDE_ON_CLOSE); //单击对话框的关闭按钮时,隐藏对话框而不结束程序运行
}
public void actionPerformed(ActionEvent e) //单击事件处理程序
{
if(e.getActionCommand()=="退出") //不能用switch(int)语句
System.exit(0); //单击菜单项时结束程序
if(e.getActionCommand()=="剪切")
textarea.cut(); //将选中文本剪切送系统剪贴板
if(e.getActionCommand()=="复制")
textarea.copy();
if(e.getActionCommand()=="粘贴")
textarea.paste();
if(e.getSource()==text_size) //单击文本行时,改变字号
{
int size=0;
try
{
size = Integer.parseInt(text_size.getText());
if (size<=0 || size>)
throw new Exception("SizeException"); //抛出异常对象
java.awt.Font font = textarea.getFont();
textarea.setFont(new Font(font.getName(),font.getStyle(),size));
}
catch(NumberFormatException nfe)
{
label_dialog.setText("\""+text_size.getText()+"\" 不能转换成整数,请重新输入!");
dialog.setLocation(this.getX()+,this.getY()+);
dialog.setVisible(true);
}
catch(Exception ex)
{
if (ex.getMessage()=="SizeException") //捕获自己抛出的异常对象
{
label_dialog.setText(size+" 字号不合适,请重新输入!");
dialog.setLocation(this.getX()+,this.getY()+);
dialog.setVisible(true);
}
}
finally{ }
}
}
public void itemStateChanged(ItemEvent e) //复选框选择事件处理程序
{ //实现ItemListener接口中的方法
Font font = textarea.getFont();
int style = font.getStyle();
if (e.getSource()==checkbox_bold)
style = style ^ 1; //整数的位运算,异或^
if (e.getSource()==checkbox_italic)
style = style ^ 2;
textarea.setFont(new Font(font.getName(),style,font.getSize()));
}
public void mouseClicked(MouseEvent mec) //单击鼠标时触发
{ //实现MouseListener接口中的方法
if (mec.getModifiers()==mec.BUTTON3_MASK) //单击的是鼠标右键
popupmenu.show(textarea,mec.getX(),mec.getY());//在鼠标单击处显示快捷菜单
}
public void mousePressed(MouseEvent mep) { }
public void mouseReleased(MouseEvent mer) { }
public void mouseEntered(MouseEvent mee) { }
public void mouseExited(MouseEvent mex) { }
public void mouseDragged(MouseEvent med) { }
public static void main(String arg[])
{
new EditorJFrame();
}
}
GridLayoutåGridViewçåºå«
GridLayoutåæ¥ç 究ï¼å¯ä»¥è¿ä¹è¯´è¿ä¸ªå¸å±ç»å¯¹æ¯å¼åè çç¦é³ï¼å®å¤§å¤§ç®åäºå¯¹å¤æå¸å±çå¤çï¼å æ¬æ§è½æé«ä¸æ¯ä¸å两åãå®ä¸GridViewæ¯å®å ¨ä¸åçæ¦å¿µï¼GridViewæ¯ä¸ç§éé å¨å¸å±,å®ç继æ¿å ³ç³»æ¯ï¼ViewGroup > AdapterView > AbsListView > GridViewï¼èGridLayoutç继æ¿å ³ç³»æ¯ï¼ViewGroup > GridLayoutï¼å¯ä»¥çåºå¦æ论è¾åçè¯ï¼GridLayoutæ¯GridViewçç·ç·è¾çï¼ä½ä¸æ¯äº²çç·ç·å¦ï¼GridViewç亲çç·ç·æ¯AdapterViewï¼èGridLayoutæ¯AdapterViewçå å¼ãGridViewçç·ç·æ¯éé å¨è§å¾ï¼å½ç¶ç·ç·çå å¼GridLayoutå°±ä¸åºè¯¥æ¯éé å¨è§å¾äºã é£ä¹ä»ä¹æ¶åç¨ååGridViewä»ä¹æ¶åç¨ç·ç·GridLayoutå¢?类似ä¹å®«æ ¼è¿ç§å¯ä»¥éç¨GridViewãä½æ¯åAndroidç³»ç»èªå¸¦ç计ç®å¨ççé¢å°±ä¸å¯è½éè¿GridViewå®ç°ï¼å 为GridViewæ设置çæ¯ä¸ªItemé½æ¯ä¸æ ·çï¼æ æ³å®ç°ç±»ä¼¼è®¡ç®å¨item大å°ä¸ååè½ï¼å¦æ使ç¨GridLayoutå®ç°é£å°±ç®åå¤äºã