⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 s02.htm

📁 java图形设计卷2 swing
💻 HTM
📖 第 1 页 / 共 5 页
字号:
            <p> <b><a name="2.1.3"></a>2.1.3 应用程序</b></p>            <p>  例2-2所示的应用程序与例2-1所示的小应用程序在功能上是完成相同的。它们都把JLabel的一个实例添加到它们的根窗格的内容窗格中。<br>                例2-3列出了<a href="s02_t03.jar" target="_blank">图2-3</a>所用的应用程序的代码。</p>            <p align="center"><b>例2-3 一个Swing应用程序</b></p>            <p>  import javax.swing.*;<br>                import java.awt.*;<br>                import java.awt.event.*;</p>            <p>  public class Test extends JFrame {<br>                 public Test() {<br>                  super(&quot;An Application&quot;);</p>            <p>     Container contentPane = getContentPane();<br>                  /*原文:<br>                  Icon icon = new ImageIcon(&quot;swing.gif&quot;, <br>                   &quot;An animated GIF of Duke on a swing&quot;);</p>            <p>     JLabel label = new JLabel(&quot;Swing!&quot;, icon,<br>                   SwingConstants.CENTER);<br>                  ----*/ </p>            <p>    //修改成:<br>                  java.net.URL codebase=getClass().getResource("swing.gif");<br>                  JLabel label = new JLabel("Swing!",new ImageIcon(codebase),               SwingConstants.CENTER); <br>                  //---<br>                  contentPane.add(label, BorderLayout.CENTER);<br>                 }<br>                 public static void main(String args[]) {<br>                  final JFrame f = new Test();</p>            <p>     f.setBounds(100,100,300,250);<br>                  f.setVisible(true);<br>                  f.setDefaultCloseOperation(DISPOSE_ON_CLOSE);</p>            <p>     f.addWindowListener(new WindowAdapter() {<br>                   public void windowClosed(WindowEvent e) {<br>                    System.exit(0);<br>                   }<br>                  });<br>                 }<br>                }</p>            <p>  应用程序比小应用程序要稍微复杂些,这是因为它们不是在浏览器内部运行的,即浏览器不启动它们也不设置它们的大小。应用程序必须提供main方法,必须把一个窗体实例化,随后确定该窗体的大小(注:可使用JFrame.pack()显式地给出窗体的大小)并使该窗体可见。<br>                例2-2中的应用程序还设置窗体的缺省关闭操作并添加一个窗口监听器,该监听器在窗体被关闭后会退出这个应用程序。有关Swing窗体的缺省关闭操作的更多信息,请参见2.1.4节“JFrame类”。<br>                Swing小应用程序和应用程序有许多共同点。它们都含有一个JRootPane实例,都必须把组件添加到根窗格的内容窗格中。而且,不能显式地设置Swing小应用程序或Swing应用程序的布局管理器。             </p>            <p> <b><a name="2.1.4"></a>2.1.4 JFrame类</b></p>            <p>  JFrame类扩展java.awt.Frame,与JApplet类似,它也实现Accessible接口和RootPaneCotainer接口。JFrame还实现Swing.WindowsConstants接口,该接口定义缺省关闭操作的常量。有关Swing常量的更多信息,请参见6.4节“Swing常量”。<br>                JFrame实惠许多在JApplet中能找到的、相同的方法。与JApplet类似,为了不显式地设置其布局管理器或不把组件直接添加到窗体中,JFrame重载setLayout和addImpl方法。JRame实现了所有在RootPaneContainer接口中定义的方法,还实现了通话和禁止根窗格检查的方法。JFrame还实惠了确定当前是束启用了根窗格检查的方法。<br>                类总结2-2总结了JFrame类。</p>            <p><br>              <b>类总结2-2 JFrame</b></p>            <p>  扩展:java.applet.Frame<br>                实现:javax.accessibility.Accessible、RootPaneContainer<br>                1.构造方法<br>                public JFrame()<br>                public JFrame(String title)<br>                JFrame有两个构造方法,一个构造方法不带参数,一个构造方法以一个字符串为参数,该字符串代表窗体的标题。<br>                浏览器或小应用程序的阅读器会调用Swing小应用程序的构造方法,因此,通常不需要开发人员编写代码来调用它的构造方法,但是,应用程序必须负责构造窗体并负责设置窗体的大小。通常为JFrame的实例选择带一个字符串的构造方法,不带参数的构造方法将产生没有标题的窗体。               <br>                (1)与JApplet交叠的方法<br>                protected void addImpl(Component,Object,int)<br>                prrotected JRootPane createRootPane()<br>                public AccessibleContext getAccessibleContext()<br>                public Container getContentPane()<br>                public Component getGlassPane()<br>                public JMenuBar getMenuBar()<br>                public JLayeredPane getLayeredPane()<br>                public JRootPane getRootPane()<br>                protected boolean isRootPaneCheckingEnabled()<br>                protected void processKeyEvent(KeyEvent)<br>                public void setContentPane(Container)<br>                public void setGlassPane(Component)<br>                public void setMenuBar(JMenu Bar)<br>                public void setLayeredPanec(JlayeredPane)<br>                public void setLayout(LayoutManager)<br>                protected void setRootPane(JRootPane)<br>                protected void setRootPaneCheckingEnabled(boolean)<br>                public void update(Graphics)<br>                上面列出的JFrame方法与JApplet中定义的方法交叠。其中的大部分方法与JApplet中相应方法的实现方式是相同的。例如,如果允许根窗格检查,则JFrame.setLayout和JFrame.addImpl都将弹出一个异常信息。<br>                有关上述方法的更多信息,请参见“类总结2-1JApplet”。<br>                (2)窗体初始化/缺省的关闭操作/窗口事件 <br>                protected void frameInit()<br>                public int getDefaultCloseOperation()<br>                protected void setDefaultCloseOperation(int)<br>                protected void processWindowEvent(WindowEvent)<br>                JFrame构造方法调用frameInit方法来初始化窗体。JFrame的frameInit()方法允许窗体的键盘事件和窗口事件,设置窗体的根窗格和背景色,并允许根窗格检查。如果缺省的设置不令人满意的话,也可扩展JFrame以重载frameInit()。</p>            <p>   使用AWT窗体时,开发人要负责处理窗口关闭事件。通常,这需要重载事件处理方法,需要简单地隐藏窗口或隐藏窗口并清除其本地资源。而Swing通过把一个缺省关闭操作与每一个JFrame实例相关联来使窗口的关闭事件较容易处理。可以用setDefaultCloseOperation方法来设置缺省的关闭操作,而且可以用getDefaultCloseOperation()来获取缺省的关闭操作。可以传送给setDefaultCloseOperation()的integer值在WindowConstants类中定义,表2-1,表2-1列出了integer值。</p>            <p>        <b>表2-1 WindowContants public常数</b><br>                ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━<br>                <b>方法名          实现 </b><br>                ─────────────────────────────────<br>                DO_NOTHNG_ON_CLOSE  关闭窗口时什么也不做<br>                HIDE_ON_CLOSE     关闭窗口隐藏该窗口<br>                DISPOSE_ON_CLOSE   关闭窗口时隐藏该窗口并清除其本地资源 <br>                ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p>            <p>  如果没有显式地设置JFrame的缺省关闭操作,则缺省值是DO_NOTHING_ON_CLOSE。<br>                DISPOSE_ON_CLOSE隐藏窗体并清除与这个窗体有关的系统资源。如果该窗体是应用程序窗体,则在该窗体清除后,应用程序将继续运行。例如,例2-2所列的应用程序把应用程序窗体的缺省关闭操作设置为DISPOSE_ON_CLOSE,但是,应用程序仍然负责处理窗体关闭事件。到应用程序得到窗体已关闭(当调用windowClosed方法时)窗体已隐藏并清除通知时,应用程序仍在运行;结果,应用程序在windowClosed方法中调用System.exit()。</p>            <p> <b><a name="2.1.5"></a>2.1.5 小应用程序/应用程序的组合</b></p>            <p>  有时需要实现这样一个源文件,它既可作为应用程序运行又可作为小应用程序运行。例2-3示出了一种实现小应用程序/应用程序组合的方法。</p>            <p align="center"><b>例2-3 Swing小应用程序/应用程序组合</b></p>            <p>  import javax.swing.*;<br>                import java.awt.*;<br>                import java.awt.event.*;</p>            <p>  public class Test extends JApplet {<br>                 public void init() {<br>                  Container contentPane = getContentPane();<br>               <br>                  /*原文<br>                  Icon icon = new ImageIcon(&quot;swing.gif&quot;);<br>                  JLabel label = new JLabel(icon);<br>                  */<br>                  //原文如不修改,不能正常显示图标 </p>            <p>    //修改后--------<br>                  java.net.URL codebase=getClass().getResource(&quot;swing.gif&quot;);<br>                  JLabel label = new JLabel(new ImageIcon(codebase));<br>                  //----------修改后的程序有个毛病,既作为applet使用时,不能刷新,一旦刷新图就没了。</p>            <p>     contentPane.setLayout(new FlowLayout()); <br>                  contentPane.add(label);</p>            <p>     //contentPane.add(label);<br>                 }<br>                 public static void main(String args[]) {<br>                  final JFrame f = new JFrame();<br>                  JApplet applet = new Test();</p>            <p>     applet.init();</p>            <p>     f.setContentPane(applet.getContentPane());<br>                  f.setBounds(100,100,308,199);<br>                  f.setTitle(&quot;An Application&quot;);<br>                  f.setVisible(true);</p>            <p>     f.setDefaultCloseOperation(<br>                  WindowConstants.DISPOSE_ON_CLOSE);</p>            <p>     f.addWindowListener(new WindowAdapter() {<br>                   public void windowClosed(WindowEvent e) {<br>                    System.exit(0);<br>                   }<br>                  });<br>                 }<br>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -