JPanel 是 JComponent 的直接子类(可以用JPanel替换 JComponent)
Graphics2D是Graphics的子类
Graphics2D类
getX(),getY(),getWidth(),getHeight()获取当前组件的信息(左上角顶点x,y,宽,高)
直线
Line2D line=new Line2D.Double(startx,starty,endx,endy);
g2.draw(line);
矩形
//使用左上顶点的坐标、宽度和高度
Rectangle2D doubleRect=new Rectangle2D.Double(startx,starty,width,height);
圆
//****使用外接矩形的左上顶点坐标、宽度和高度**
Ellipse2D e=new Ellipse2D.Double(startx,starty,width,height);**
//****如果已经有外接矩形**
Ellipse2D e=new Ellipse2D.Double( );**
e.setFrame( rect);**
**//****使用中心点和一个顶点坐标**
e.setFrameFromCenter(centerx,centery,x1,y1 );
弧
//构造函数(x,y,w,h,p,q,TYPE)xywh分别是圆的外接矩形的左上角顶点xy坐标和宽和pq分别为起始圆心角和终止圆心角,TYPE是类型
Arc2D arc1=new Arc2D.Double(x,y,2*radius,2*radius,0,30,Arc2D.CHORD);//右
g2.draw(arc1);
Arc2D arc2=new Arc2D.Double(x,y,2*radius,2*radius,90,30,Arc2D.PIE);//上
g2.draw(arc2);
Arc2D arc3=new Arc2D.Double(x,y,2*radius,2*radius,180,30,Arc2D.OPEN);//左
g2.draw(arc3);
Arc2D arc4=new Arc2D.Double(x,y,2*radius,2*radius,270,30,Arc2D.PIE);//下
g2.draw(arc4);
color
Graphics2D g2=…;**
g2.setPaint(Color.RED); //****使用****Color****中的标准颜色**
g2.setPaint(new Color(0,128,128));//****参数为红绿蓝比例,****0-255**
g2.setPaint(SystemColor.windowText);//****使用****SystemColor****中颜色**
//****将面板的背景颜色设置成用户桌面窗口使用的默认值**
panel.setBackground(SystemColor.window);**
font
Font helvb14=new Font(“Helvetica”,Font.BOLD,14);//****字体名****,****风格****,****大小**
Font scansbold14=new Font(“ScansSerif”,Font.ITALIC,14);
g2.setFont(scansbold14);
g2.drawString(“hello”,75,100);*
//ITALIC斜体 BOLD粗体 PLAIN一般
Image
Image image=new ImageIcon(filename).getImage( );//读取图像**
**g.drawImage(image,x,y,null);//在左上角坐标为x,y的地方绘制图像**
**g.drawImage(image,x,y,width,height,null);//图像缩放到指定大小**
Swing
● BorderLayout将容器划分为东、南、西、北、中
● 最多放置5个组件;可以使用面板放置更多组件;若组件少于5个,空闲的位置被相邻区域占用;每个组件将填充相应的区域。
● JFrame的默认布局
frame.add(new JButton("北"),"North");//将该按钮放置在North的位置
//frame.add(new JButton("North"),BorderLayout.NORTH);//也可写成这种形式
JPanel panel=new JPanel();
panel.add(new JButton("button1"));
panel.add(new JButton("button2"));
panel.add(new JButton("button3"));
frame.add(panel,"South");
● FlowLayout组件在一行上水平排列,当没有空间时就开始新的一行(从左到右,从上到下依次排列);可以设定组件在一行上的对齐方式;容器发生变化时,组件大小不变(组件按照最佳大小显示)
● JPanel的默认布局
● 使用setLayout为容器设置布局管理器
//frame.setLayout(new FlowLayout());//改变布局管理器,默认对齐方式为居中对齐
//frame.setLayout(new FlowLayout(FlowLayout.LEFT));//指定对齐方式,LEFT,CENTER,RIGHT
frame.setLayout(new FlowLayout(FlowLayout.LEFT,40,20));//指定对齐方式,水平间距,垂直间距
frame.add(new JButton("button1"));
frame.add...
JTextField文本域
● 用于单行文本输入
● 常用方法 setText( ); getText( );setEditable( ) ; isEditable(); setColumns( ); getColumns();
JTextField t=new JTextField(20);
**//列数是设置首选大小的一个提示,布局管理器可能会调整文本域的大小,用户可以输入更长的字符串;初始值为空;
**JTextField t=new JTextField(“Default input”,20);**
**//”Default input”是初始值
**JTextField t=new JTextField(20);//****为空**
**t.setText("example");**
**XXXX.add(t);//****添加到某个容器**
JTextArea(文本区)
● 用于多行文本输入
● 常用方法
setLineWrap( );setColumns( );setRows( );append( );insert( );getText( );setText( );…
● 如果需要滚动条,则将文本区添加到滚动窗格中,然后将滚动窗格添加到某个容器中 。如果文本超过了文本区可显示范围,滚动条就会出现。
JTextArea textArea=new JTextArea(8,40);**
**//****指定行数和列数,这些数值是首选大小,布局管理器会对其缩放**
**JScrollPane scrollPane=new JScrollPane(textArea);//****增加滚动窗格**
**XXXX.add(scrollPane);//****将滚动窗格添加到某个容器中**
JLabel标签)
● 用来容纳文本,常用于识别其他的组件
● 有多种构造方法,可以指定文本或图标,以及内容的对齐方式
JLabel label=new JLabel("输入");//****显示文字“输入”**
**JLabel label=new JLabel("输入",JLabel.LEFT);//****左对齐**
**JLabel label=new JLabel("输入",new ImageIcon("yellow-ball.gif"),JLabel.LEFT);//图标**
**label.setText("新内容");//****设置标签文本
**label.setIcon( new ImageIcon(“yellow-ball.gif”));//设置图标**
综合实例
class TextFrame extends JFrame
{
private JTextArea textArea;
private JTextField textField;
public TextFrame()
{
setTitle("TextTest");
setSize(800,400);
JPanel panel=new JPanel();
JLabel label=new JLabel("输入",JLabel.LEFT);
panel.add(label);//将标签加入到面板上
textField=new JTextField(30);
panel.add(textField);//将文本域加入到面板上
JButton appendButton = new JButton("append");
appendButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
textArea.append(textField.getText());
}
});//添加事件监听器
panel.add(appendButton);//将按钮加入到面板上
add(panel,"North");//将面板加入到框架中
textArea = new JTextArea(8,40);
textArea.setLineWrap(true);//设置是否自动换行
JScrollPane scrollPane = new JScrollPane(textArea);//添加滚动条
add(scrollPane, "Center");//将滚动窗格添加到框架中
}
}
JButton
使用方法见代码
JOptiongPane
● 显示简单的标准对话框的静态方法
showMessageDialog:告知用户某事已发生
showConfirmDialog:显示一条消息并等待用户确认(返回用户点击的按钮)
showInputDialog:提示要求某些输入
showOptionDialog:上述三项的统一,显示消息并得到用户在一组选项中的选择
● 图标取决于消息类型
ERROR_MESSAGE, INFORMATION_MESSAGE, WARNING_MESSAGE, QUESTION_MESSAGE, PLAIN_MESSAGE
消息可以是字符串,图标,用户界面组件或任何其他对象
● 底部按钮取决于对话框类型和选项类型
(1)对于showMessageDialog(确认)和showInputDialog(确认/取消),只能得到一组标准按钮
(2)对于showConfirmDialog可选择以下选项之一:
DEFAULT_OPTION, (只有确认) YES_NO_OPTION, (是/否)
YES_NO_CANCEL_OPTION, (是,否,取消)OK_CANCEL_OPTION(确认,取消)
(3)对于showOptionDialog,可以指定任意选项;
public DialogFrame()
{
setSize(800,400);
setTitle("Dialog test");
setLayout(new FlowLayout());
add(button1);...
//四个按钮共用一个事件监听器
ActionListener listener=new MyActionListener();
button1.addActionListener(listener);
button2.addActionListener(listener);...
class MyActionListener implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
//showMessageDialog(Component parentComponent, Object message,
//String title, int messageType)
if (event.getSource()==button1)
JOptionPane.showMessageDialog(DialogFrame.this,
"This is a Message Dialog",
"Message",JOptionPane.WARNING_MESSAGE);
//showConfirmDialog(Component parentComponent, Object message,
//String title, int optionType, int messageType)
if (event.getSource()==button2)
JOptionPane.showConfirmDialog(null,
"This is a Confirm Dialog",
"Confirm",JOptionPane.OK_CANCEL_OPTION,
JOptionPane.INFORMATION_MESSAGE);
/*showOptionDialog(Component parentComponent, Object message,
String title, int optionType, int messageType, Icon icon,
Object[] options, Object initialValue)*/
Object[] options = { new JTextField(5), new ImageIcon("文件路径") , "yes","no","cancel"};//底部按钮行
if (event.getSource()==button3)
JOptionPane.showOptionDialog(null, "Click OK to continue",
"Option", JOptionPane.DEFAULT_OPTION,
JOptionPane.WARNING_MESSAGE, null,
options, options[0]);
//showInputDialog(Component parentComponent, Object message,
//String title, int messageType)
if (event.getSource()==button4)
JOptionPane.showInputDialog(null,"pleas input:",
"Input",JOptionPane.QUESTION_MESSAGE);
}
}
判断用户点击那个按钮
int selection=JOptionPane.showConfirmDialog(parent,"Message", "Title",JOptionPane.OK_CANCEL_OPTION,OptionPane.QUESTION_MESSAGE);
if(selection==JOptionPane.OK_OPTION)…
● JFileChooser
● 用来显示一个文件对话框(打开文件,保存文件)
● 使用方法
(1)创建JFileChooser对象
(2)设置当前目录(setCurrentDirectory)
(3)可设置默认文件名(setSelectedFile)
(4)可使用setMultiSelectionEnabled方法,允许用户选择多个文件
(5)可设置文件过滤器,显示某一类型文件
(6)如果需要用户选择目录,需使用setFileSelectedMode方法
(7)使用showOpenDialog或showSaveDialog显示对话框
(8) 使用getSelectedFile或getSelectedFiles得到选择的一个或多个文件
● 文件过滤器的使用方法(javax.swing.filechooser.FileFilter)
public class GifFilter extends FileFilter
{
public boolean accept(File f)
{ //是否接收一个文件
return f.getName().toLowerCase().endsWith(“.gif”)||f.isDirectory();
}
public String getDescription()
{//文件类型的说明信息
return “GIF Image”;
}
}
chooser.setFileFilter(new GifFilter());
class TextViewerFrame extends JFrame
{
private JTextArea textArea;
private JFileChooser chooser;
public TextViewerFrame()
{
setTitle("FileChooserTest");
setSize(800,600);
// 创建菜单,菜单条包括一个菜单File,File包含两个菜单项Open和Exit
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
JMenu menu = new JMenu("File");
menuBar.add(menu);//不是最后一级
JMenuItem openItem = new JMenuItem("Open");
menu.add(openItem);
openItem.addActionListener(new FileOpenListener());
JMenuItem exitItem = new JMenuItem("Exit");
menu.add(exitItem);
//为菜单项注册事件监听器,点击时程序退出
exitItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
System.exit(0);
}
});
// 使用具有滚动条的 JTextArea显示文件内容
textArea = new JTextArea(30,40);
JScrollPane scrollPane=new JScrollPane(textArea);
add(scrollPane);
chooser = new JFileChooser();//创建JFileChooser对象
}
/**
下面为 File->Open 菜单项的事件监听器类.
*/
private class FileOpenListener implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
//设置当前工作目录
chooser.setCurrentDirectory(new File("."));
//设置文件过滤器,显示后缀为 .txt和 .java的文件
TextFileFilter filter= new TextFileFilter();
chooser.setFileFilter(filter);
// 显示选择对话框
chooser.showOpenDialog(null);
//获取被选择的文件名
String filename=chooser.getSelectedFile().getPath();
//在文本区显示被打开的文件的名字
textArea.setText("");
textArea.append("打开文件"+filename+"\n");
//在文本区显示文件内容
File file=chooser.getSelectedFile();
FileReader fileReader=null;
try
{
try
{
fileReader=new FileReader(file);
char [] buf=new char[10000];
int len=fileReader.read(buf);
textArea.append(new String(buf,0,len));
}
finally
{
fileReader.close();
}
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
}
/**
下面是一个文件过滤器,接受所有 .txt和.java文件
*/
class TextFileFilter extends FileFilter
{
//返回该类型的说明信息
public String getDescription()
{
return "文本文件";
}
//测试文件是否可以接受
public boolean accept(File f)
{
if (f.isDirectory()) return true;
String name = f.getName().toLowerCase();
if( name.endsWith(".java")||name.endsWith(".txt"))
return true;
else return false;
}
}
Jpanel
Dimension | getMaximumSize() 如果最大大小设置为非 null值,则返回。 |
Dimension | getMinimumSize() 如果最小尺寸设置为非 null值,则返回。 |
int | getWidth() 返回此组件的当前宽度。 |
int | getHeght() 返回此组件的当前高度。 |
int | getX() 返回组件原点的当前x坐标。 |
int | getY() 返回组件原点的当前y坐标。 |
void | setBackground(Color bg) 设置此组件的背景颜色 |
void | setFont(Font font) 设置此组件的字体。 |
void | repaint() 如果组件显示,则将指定的区域添加到脏区列表。 |
JFrame
void | setIconImage(Image image) 将要显示的图像设置为此窗口的图标。 |
void | setLayout(LayoutManager manager) 设置 LayoutManager 。 |
void | setBackground(Color bgColor) 设置此窗口的背景颜色。 |
void | setMaximizedBounds(Rectangle bounds) 设置此框架的最大化边界。 |
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setSize(500,500);
setLocation(x,y);//左上角