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);//左上角