当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:16:00  来源:本站整理

java对话框的筹划[Java编程]

赞助商链接



  本文“java对话框的筹划[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
对话框是一个从别的窗口弹出的窗口.它的目的是处理一些特别的争议和它们的细节而不使本来的窗口陷入混乱之中.对话框大量在设置窗口的编程环境中利用,但就像前面提到的一样,鲜于在程序片中利用.
我们需求从对话类处担当以成立别的范例的窗口、像帧一样的对话框.和窗框差别,对话框不能拥有菜单条也不能改变光标,但除此之外它们非常的类似.一个对话框拥有筹划管理器(默许的是BorderLayout筹划管理器)和过载action()等等,或用handleEvent()去处理事件.我们会注意到handleEvent()的一个重要差别:当WINDOW_DESTORY事件发生时,我们并不但愿关闭正在运行的利用程序!
相反,我们可以利用对话窗口通过调用dispace()释放资源.在下面的例子中,对话框是由定义在那儿作为类的ToeButton的特别按钮构成的网格构成的(操纵GridLayout筹划管理器).ToeButton按钮环绕它自已画了一个帧,并且依靠它的状况:在空的中的“X”大概“O”.它从空白开始,然后依靠利用者的挑选,转换成“X”或“O”.但是,当我们单击在按钮上时,它会在“X”和“O”之间往复交换.(这产生了一种近似填字游戏的感受,当然比它更令人讨厌.)别的,这个对话框可以被设置为在主利用程序窗口中为很多的行和列变更号码.
//: ToeTest.java
// Demonstration of dialog boxes
// and creating your own components
import java.awt.*;

class ToeButton extends Canvas {
  int state = ToeDialog.BLANK;
  ToeDialog parent;
  ToeButton(ToeDialog parent) {
    this.parent = parent;
  }
  public void paint(Graphics  g) {
    int x1 = 0;
    int y1 = 0;
    int x2 = size().width - 1;
    int y2 = size().height - 1;
    g.drawRect(x1, y1, x2, y2);
    x1 = x2/4;
    y1 = y2/4;
    int wide = x2/2;
    int high = y2/2;
    if(state == ToeDialog.XX) {
      g.drawLine(x1, y1, x1 + wide, y1 + high);
      g.drawLine(x1, y1 + high, x1 + wide, y1);
    }
    if(state == ToeDialog.OO) {
      g.drawOval(x1, y1, x1+wide/2, y1+high/2);
    }
  }
  public boolean 
  mouseDown(Event evt, int x, int y) {
    if(state == ToeDialog.BLANK) {
      state = parent.turn;
      parent.turn= (parent.turn == ToeDialog.XX ?
        ToeDialog.OO : ToeDialog.XX);
    } 
    else
      state = (state == ToeDialog.XX ? 
        ToeDialog.OO : ToeDialog.XX);
    repaint();
    return true;
  }
}

class ToeDialog extends Dialog {
  // w = number of cells wide
  // h = number of cells high
  static final int BLANK = 0;
  static final int XX = 1;
  static final int OO = 2;
  int turn = XX; // Start with x's turn
  public ToeDialog(Frame parent, int w, int h) {
    super(parent, "The game itself", false);
    setLayout(new GridLayout(w, h));
    for(int i = 0; i < w * h; i++)
      add(new ToeButton(this));
    resize(w * 50, h * 50);
  }
  public boolean handleEvent(Event evt) {
    if(evt.id == Event.WINDOW_DESTROY) 
      dispose();
    else 
      return super.handleEvent(evt);
    return true;
  }
}

public class ToeTest extends Frame {
  TextField rows = new TextField("3");
  TextField cols = new TextField("3");
  public ToeTest() {
    setTitle("Toe Test");
    Panel p = new Panel();
    p.setLayout(new GridLayout(2,2));
    p.add(new Label("Rows", Label.CENTER));
    p.add(rows);
    p.add(new Label("Columns", Label.CENTER));
    p.add(cols);
    add("North", p);
    add("South", new Button("go"));
  }
  public boolean handleEvent(Event evt) {
    if(evt.id == Event.WINDOW_DESTROY) 
      System.exit(0);
    else 
      return super.handleEvent(evt);
    return true;
  }
  public boolean action(Event evt, Object arg) {
    if(arg.equals("go")) {
      Dialog d = new ToeDialog(
        this, 
        Integer.parseInt(rows.getText()),
        Integer.parseInt(cols.getText()));
      d.show();
    } 
    else 
      return super.action(evt, arg);
    return true;
  }
  public static void main(String[] args) {
    Frame f = new ToeTest();
    f.resize(200,100);
    f.show();
  }
} ///:~
ToeButton类保存了一个句柄到它ToeDialog型的父类中.正如前面所述,ToeButton和ToeDialog高度的结合因为一个ToeButton只能被一个ToeDialog所利用,但它却办理了一系列的问题,事实上这实在不是一个糟糕的办理筹划因为没有别的的可以记录用户挑选的对话类.当然我们可以利用别的的制造ToeDialog.turn(ToeButton的静态的一部份)办法.这种办法消除了它们的精密接洽,但却禁止了我们一次拥有多个ToeDialog(无论若何,至少有一个正常地运行).
paint()是一种与图形有关的办法:它环绕按钮画出矩形并画出“X”或“O”.这美满是冗长的计算,但却非常的直观.
一个鼠标单击被过载的mouseDown()办法所俘获,最要紧的是查抄能否有事件写在按钮上.假如没有,父窗口会被询问以找出谁挑选了它并用来肯定按钮的状况.值得注意的是按钮随后交回到父类中并且改变它的挑选.假如按钮已经显示这为“X”和“O”,那么它们会被改变状况.我们能注意到本书第三章中描写的在这些计算中便利的利用的三个一组的If-else.当一个按钮的状况改变后,按钮会被重画.
ToeDialog的构建器非常的简单:它像我们所需求的一样增添一些按钮到GridLayout筹划管理器中,然后调整每个按钮每边大小为50个像素(假如我们不调整窗口,那么它就不会显示出来).注意handleEvent()恰好为WINDOW_DESTROY调用dispose(),因此整个利用程序不会被关闭.
ToeTest设置整个利用程序以成立TextField(为输入按钮网格的行和列)和“go”按钮.我们会领会action()在这个程序中利用不太令人称心的“字符串匹配”技术来测试按钮的按下(请肯定我们拼写和大写都是精确的!).当按钮按下时,TextField中的数据将被取出,并且,因为它们在字符串构造中,所以需求操纵静态的Integer.paresInt()办法来改变成中止.一旦对话类被成立,我们就必须调用show()办法来显示和激活它.
我们会注意到ToeDialog对象赋值给一个对话句柄 d.这是一个上溯造型的例子,固然它没有真正地产生重要的差别,因为全部的事件都是show()调用的.但是,假如我们想调用ToeDialog中已经存在的一些办法,我们需求对ToeDialog句柄赋值,就不会在一个上溯中丧失信息.

1. 文件对话类
在一些操作系统中拥有很多的特别内建对话框去处理挑选的事件,比方:字库,颜色,打印机以及近似的事件.几近全部的操作系统都支持翻开和保存文件,但是,Java的FileDialog包更简单利用.当然这会不再检测全部利用的程序片,因为程序片在本地磁盘上既不能读也不能写文件.(这会在新的浏览器中交换程序片的信任关系.)
下面的利用程序应用了两个文件对话类的窗体,一个是翻开,一个是保存.大大都的代码到目前已为我们所熟习,而全部这些风趣的活动发生在两个差别按钮单击事件的action()办法中.
//: FileDialogTest.java
// Demonstration of File dialog boxes
import java.awt.*;

public class FileDialogTest extends Frame {
  TextField filename = new TextField();
  TextField directory = new TextField();
  Button open = new Button("Open");
  Button save = new Button("Save");
  public FileDialogTest() {
    setTitle("File Dialog Test");
    Panel p = new Panel();
    p.setLayout(new FlowLayout());
    p.add(open);
    p.add(save);
    add("South", p);
    directory.setEditable(false);
    filename.setEditable(false);
    p = new Panel();
    p.setLayout(new GridLayout(2,1));
    p.add(filename);
    p.add(directory);
    add("North", p);
  }
  public boolean handleEvent(Event evt) {
    if(evt.id == Event.WINDOW_DESTROY) 
      System.exit(0);
    else 
      return super.handleEvent(evt);
    return true;
  }
  public boolean action(Event evt, Object arg) {
    if(evt.target.equals(open)) {
      // Two arguments, defaults to open file:
      FileDialog d = new FileDialog(this,
        "What file do you want to open?");
      d.setFile("*.java"); // Filename filter
      d.setDirectory("."); // Current directory
      d.show();
      String openFile;
      if((openFile = d.getFile()) != null) {
        filename.setText(openFile);
        directory.setText(d.getDirectory());
      } else {
        filename.setText("You pressed cancel");
        directory.setText("");
      }
    } 
    else if(evt.target.equals(save)) {
      FileDialog d = new FileDialog(this,
        "What file do you want to save?",
        FileDialog.SAVE);
      d.setFile("*.java");
      d.setDirectory(".");
      d.show();
      String saveFile;
      if((saveFile = d.getFile()) != null) {
        filename.setText(saveFile);
        directory.setText(d.getDirectory());
      } else {
        filename.setText("You pressed cancel");
        directory.setText("");
      }
    } 
    else 
      return super.action(evt, arg);
    return true;
  }
  public static void main(String[] args) {
    Frame f = new FileDialogTest();
    f.resize(250,110);
    f.show();
  }
} ///:~
对一个“翻开文件”对话框,我们利用构建器设置两个自变量;首先是父窗口句柄,其次是FileDialog标题条的标题.setFile()办法供应一个初始文件名--大概本地操作系统支持通配符,因此在这个例子中全部的.java文件最开首会被显示出来.setDirectory()办法挑选文件决意开始的目录(普通而言,操作系统答应用户改变目录).
show()号令直到对话类关闭才返回.FileDialog对象一向存在,因此我们可以从它那边读取数据.假如我们调用getFile()并且它返回空,这意味着用户退出了对话类.文件名和调用getDirectory()办法的后果都显示在TextFields里.
按钮的保存工作利用一样的办法,除了因为FileDialog而利用差别的构建器.这个构建器设置了三个自变量并且第三的一个自变量必须为FileDialog.SAVE或FileDialog.OPEN.
  以上是“java对话框的筹划[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 利用Javascript实现网页水印(非图片水印)
  • Java开辟环境的搭建
  • Ubuntu java安装与配置
  • 办理Ubuntu 10.04 Firefox3.6 Java浏览器插件不工作的问
  • Ubuntu重装后Java环境的设置
  • Sun Java进入Ubuntu 10.10软件中央
  • Ubuntu 10.10配置Java开辟环境
  • 在Ubuntu 10.10中配置Java环境变量的办法
  • Ubuntu下Java环境的搭建
  • Ubuntu 10.04 下安装 Java, JRE
  • Ubuntu 10.04下的搭建SUN JAVA开辟环境
  • Ubuntu 12.04安装java7
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .