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

📄 tij0151.html

📁 学习java的经典书籍
💻 HTML
📖 第 1 页 / 共 5 页
字号:
An 
</FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black"><B>Icon
</B></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">is
placed into the 
</FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black"><B>JLabel</B></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">
via its constructor and changed when the corresponding menu item is selected.
</FONT><P></DIV><DIV ALIGN=LEFT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">The
</FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black"><B>menuBar</B></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">
array contains the handles to all the file menus in the order that you want
them to appear on the menu bar. You pass this array to 
</FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black"><B>createMenuBar(&#160;)</B></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">,
which breaks it up into individual arrays of menu data, passing each to 
</FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black"><B>createMenu(&#160;)</B></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">.
This method, in turn, takes the first line of the menu data and creates a <A NAME="Index2340"></A><A NAME="Index2341"></A></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black"><B>JMenu</B></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">
from it, then calls 
</FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black"><B>createMenuItem(&#160;)</B></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">
for each of the remaining lines of menu data. Finally, 
</FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black"><B>createMenuItem(&#160;)</B></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">
parses each line of menu data and determines the type of menu and its
attributes, and creates that menu item appropriately. In the end, as you can
see in the 
</FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black"><B>Menus(&#160;)</B></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">
constructor, to create a menu from these tables say 
</FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black"><B>createMenuBar(menuBar)</B></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">
and everything is handled recursively.
</FONT><P></DIV><DIV ALIGN=LEFT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">This
example does not take care of building cascading menus, but you should have
enough of the concept that you can add that capability if you need it.
</FONT><a name="_Toc408018734"></a><P></DIV>
<A NAME="Heading471"></A><H3 ALIGN=LEFT>
Popup
menus
<P><A NAME="Index2342"></A><A NAME="Index2343"></A><A NAME="Index2344"></A></H3>
<DIV ALIGN=LEFT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">The
implementation of <A NAME="Index2345"></A><A NAME="Index2346"></A></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black"><B>JPopupMenu</B></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">
seems a bit strange: you must call <A NAME="Index2347"></A></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black"><B>enableEvents(&#160;)</B></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">
and select for mouse events instead of using an event listener. That is,
it&#8217;s possible to add a mouse listener but the <A NAME="Index2348"></A><A NAME="Index2349"></A></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black"><B>MouseEvent</B></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">
that comes through doesn&#8217;t return 
</FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black"><B>true</B></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">
from <A NAME="Index2350"></A><A NAME="Index2351"></A></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black"><B>isPopupTrigger(&#160;)</B></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">
&#8211; it doesn&#8217;t know that it should trigger a popup menu.
</FONT><A NAME="fnB61" HREF="#fn61">[61]</A><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">
In addition, when I tried the listener approach it behaved strangely, possibly
from recursive click handling. In any event, the following example produces the
desired popup behavior:
</FONT><P></DIV>

<font color="#990000"><PRE><font color="#009900">//: Popup.java</font>
<font color="#009900">// Creating popup menus with Swing</font>
<font color="#0000ff">package</font> c13.swing;
<font color="#0000ff">import</font> java.awt.*;
<font color="#0000ff">import</font> java.awt.event.*;
<font color="#0000ff">import</font> com.sun.java.swing.*;

<font color="#0000ff">public</font> <font color="#0000ff">class</font> Popup <font color="#0000ff">extends</font> JPanel {
  JPopupMenu popup = <font color="#0000ff">new</font> JPopupMenu();
  JTextField t = <font color="#0000ff">new</font> JTextField(10);
  <font color="#0000ff">public</font> Popup() {
    add(t);
    ActionListener al = <font color="#0000ff">new</font> ActionListener() {
      <font color="#0000ff">public</font> <font color="#0000ff">void</font> actionPerformed(ActionEvent e){
        t.setText(
          ((JMenuItem)e.getSource()).getText());
      }
    };
    JMenuItem m = <font color="#0000ff">new</font> JMenuItem("Hither");
    m.addActionListener(al);
    popup.add(m);
    m = <font color="#0000ff">new</font> JMenuItem("Yon");
    m.addActionListener(al);
    popup.add(m);
    m = <font color="#0000ff">new</font> JMenuItem("Afar");
    m.addActionListener(al);
    popup.add(m);
    popup.addSeparator();
    m = <font color="#0000ff">new</font> JMenuItem("Stay Here");
    m.addActionListener(al);
    popup.add(m);
    enableEvents(AWTEvent.MOUSE_EVENT_MASK);
  }
  <font color="#0000ff">protected</font> <font color="#0000ff">void</font> processMouseEvent(MouseEvent e){
    <font color="#0000ff">if</font> (e.isPopupTrigger())
      popup.show(
        e.getComponent(), e.getX(), e.getY());
    <font color="#0000ff">super</font>.processMouseEvent(e);
  }
  <font color="#0000ff">public</font> <font color="#0000ff">static</font> <font color="#0000ff">void</font> main(String args[]) {
    Show.inFrame(<font color="#0000ff">new</font> Popup(),200,150);
  }
} <font color="#009900">///:~ </PRE></font></font><DIV ALIGN=LEFT><P></DIV><DIV ALIGN=LEFT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">The
same 
</FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black"><B>ActionListener</B></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">
is added to each <A NAME="Index2352"></A><A NAME="Index2353"></A></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black"><B>JMenuItem</B></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">,
so that it fetches the text from the menu label and inserts it into the <A NAME="Index2354"></A><A NAME="Index2355"></A></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black"><B>JTextField</B></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">.</FONT><a name="_Toc408018735"></a><P></DIV>
<A NAME="Heading472"></A><H3 ALIGN=LEFT>
List
boxes and combo boxes
<P><A NAME="Index2356"></A><A NAME="Index2357"></A></H3>
<DIV ALIGN=LEFT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">List
boxes and <A NAME="Index2358"></A><A NAME="Index2359"></A>combo
boxes in Swing work much as they do in the old AWT, but they also have
increased functionality if you need it. In addition, some conveniences have
been added. For example, the <A NAME="Index2360"></A><A NAME="Index2361"></A></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black"><B>JList</B></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">
has a constructor that takes an array of 
</FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black"><B>String</B></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">s
to display (oddly enough this same feature is not available in <A NAME="Index2362"></A><A NAME="Index2363"></A></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black"><B>JComboBox</B></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">).
Here&#8217;s a simple example that shows the basic use of each:
</FONT><P></DIV>

<font color="#990000"><PRE><font color="#009900">//: ListCombo.java</font>
<font color="#009900">// List boxes &amp; Combo boxes</font>
<font color="#0000ff">package</font> c13.swing;
<font color="#0000ff">import</font> java.awt.*;
<font color="#0000ff">import</font> java.awt.event.*;
<font color="#0000ff">import</font> com.sun.java.swing.*;

<font color="#0000ff">public</font> <font color="#0000ff">class</font> ListCombo <font color="#0000ff">extends</font> JPanel {
  <font color="#0000ff">public</font> ListCombo() {
    setLayout(<font color="#0000ff">new</font> GridLayout(2,1));
    JList list = <font color="#0000ff">new</font> JList(ButtonGroups.ids);
    add(<font color="#0000ff">new</font> JScrollPane(list));
    JComboBox combo = <font color="#0000ff">new</font> JComboBox();
    <font color="#0000ff">for</font>(<font color="#0000ff">int</font> i = 0; i &lt; 100; i++)
      combo.addItem(Integer.toString(i));
    add(combo);
  }
  <font color="#0000ff">public</font> <font color="#0000ff">static</font> <font color="#0000ff">void</font> main(String args[]) {
    Show.inFrame(<font color="#0000ff">new</font> ListCombo(),200,200);
  }
} <font color="#009900">///:~ </PRE></font></font><DIV ALIGN=LEFT><P></DIV><DIV ALIGN=LEFT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">Something
else that seems a bit odd at first is that 
</FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black"><B>JList</B></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">s
do not automatically provide scrolling, even though that&#8217;s something you
always expect. Adding support for scrolling turns out to be quite easy, as
shown above &#8211; you simply wrap the 
</FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black"><B>JList</B></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">
in a <A NAME="Index2364"></A><A NAME="Index2365"></A></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black"><B>JScrollPane</B></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">
and all the details are automatically managed for you.
</FONT><a name="_Toc408018736"></a><P></DIV>
<A NAME="Heading473"></A><H3 ALIGN=LEFT>
Sliders
and progress bars
</H3>
<DIV ALIGN=LEFT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">A
<A NAME="Index2366"></A><A NAME="Index2367"></A>slider
allows the user to input data by moving a point back and forth, which is
intuitive in some situations (volume controls, for example). A <A NAME="Index2368"></A><A NAME="Index2369"></A>progress
bar displays data in a relative fashion from &#8220;full&#8221; to
&#8220;empty&#8221; so the user gets a perspective. My favorite example for
these is to simply hook the slider to the progress bar so when you move the
slider the progress bar changes accordingly:
</FONT><P></DIV>

<font color="#990000"><PRE><font color="#009900">//: Progress.java</font>
<font color="#009900">// Using progress bars and sliders</font>
<font color="#0000ff">package</font> c13.swing;
<font color="#0000ff">import</font> java.awt.*;
<font color="#0000ff">import</font> java.awt.event.*;
<font color="#0000ff">import</font> com.sun.java.swing.*;
<font color="#0000ff">import</font> com.sun.java.swing.event.*;
<font color="#0000ff">import</font> com.sun.java.swing.border.*;

<font color="#0000ff">public</font> <font color="#0000ff">class</font> Progress <font color="#0000ff">extends</font> JPanel {
  JProgressBar pb = <font color="#0000ff">new</font> JProgressBar();
  JSlider sb = 
    <font color="#0000ff">new</font> JSlider(JSlider.HORIZONTAL, 0, 100, 60);
  <font color="#0000ff">public</font> Progress() {
    setLayout(<font color="#0000ff">new</font> GridLayout(2,1));
    add(pb);
    sb.setValue(0);
    sb.setPaintTicks(<font color="#0000ff">true</font>);
    sb.setMajorTickSpacing(20);
    sb.setMinorTickSpacing(5);
    sb.setBorder(<font color="#0000ff">new</font> TitledBorder("Slide Me"));
    sb.addChangeListener(<font color="#0000ff">new</font> ChangeListener() {
      <font color="#0000ff">public</font> <font color="#0000ff">void</font> stateChanged(ChangeEvent e) {
        pb.setValue(sb.getValue());
      }
    });
    add(sb);
  }
  <font color="#0000ff">public</font> <font color="#0000ff">static</font> <font color="#0000ff">void</font> main(String args[]) {
    Show.inFrame(<font color="#0000ff">new</font> Progress(),200,150);
  }
} <font color="#009900">///:~ </PRE></font></font><DIV ALIGN=LEFT><P></DIV><DIV ALIGN=LEFT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">The
<A NAME="Index2370"></A><A NAME="Index2371"></A></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black"><B>JProgressBar
</B></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">is
fairly straightforward, but the <A NAME="Index2372"></A><A NAME="Index2373"></A></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black"><B>JSlider</B></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">
has a lot of options, such as the orientation and major and minor tick marks.
Notice how straightforward it is to add a titled border.
</FONT><a name="_Toc408018737"></a><P></DIV>
<A NAME="Heading474"></A><H3 ALIGN=LEFT>
Trees</H3>
<DIV ALIGN=LEFT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">Using
a <A NAME="Index2374"></A><A NAME="Index2375"></A></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black"><B>JTree
</B></FONT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">can
be as simple as saying:
</FONT><P></DIV>

<font color="#990000"><PRE>add(<font color="#0000ff">new</font> JTree(
  <font color="#0000ff">new</font> Object[] {"<font color="#0000ff">this</font>", "that", "other"})); </PRE></font><DIV ALIGN=LEFT><P></DIV><DIV ALIGN=LEFT><FONT FACE="Carmina Md BT" SIZE=3 COLOR="Black">This
displays a primitive <A NAME="Index2376"></A><A NAME="Index2377"></A>tree.
The API for t

⌨️ 快捷键说明

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