??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美精品www,jizzjizz在线观看,91av资源在线http://blogjava.net/junglesong/category/29591.html世上本无难事Q心以ؓ难,斯乃真难。苟不存一难之见于心,则运用之术自出?/description>zh-cnTue, 04 Mar 2008 12:22:10 GMTTue, 04 Mar 2008 12:22:10 GMT60表单元格渲染器的使用http://www.aygfsteel.com/junglesong/archive/2008/03/03/183581.htmljunglesong的博?/dc:creator>junglesong的博?/author>Mon, 03 Mar 2008 15:07:00 GMThttp://www.aygfsteel.com/junglesong/archive/2008/03/03/183581.htmlhttp://www.aygfsteel.com/junglesong/comments/183581.htmlhttp://www.aygfsteel.com/junglesong/archive/2008/03/03/183581.html#Feedback0http://www.aygfsteel.com/junglesong/comments/commentRss/183581.htmlhttp://www.aygfsteel.com/junglesong/services/trackbacks/183581.html使用表格渲染器渲染表?/strong>

在用JTableӞ用户往往希望改变它缺省的渲染方式Q比如用间隔色的行Q对特定的单元格q行Ҏ(gu)颜色昄{,q对一些可视化~程环境的表格ƈ不是一件容易的事?br /> 在Java Swing~程中我们可以用DefaultTableCellRenderer的子cL染表格来辑ֈq个目的Q实现和使用它都非常Ҏ(gu)?/p>

渲染效果一Q?/p>


步骤一Q实C个javax.swing.table.DefaultTableCellRenderer的子c?/p>

/**
* 间隔色表格渲染类
*/
public class ColorTableCellRenderer extends DefaultTableCellRenderer {
  private static final long serialVersionUID = -3378036327580475639L;

  public Component getTableCellRendererComponent(
               JTable table,
               Object value,
               boolean isSelected,
               boolean hasFocus,
               int row,
               int column) {
   
               // 得到单元?br />                Component cell =
                       super.getTableCellRendererComponent(
                               table,
                               value,
                               isSelected,
                               hasFocus,
                               row,
                               column);
               // q行渲染
               if (hasFocus) {
                 // 如果获得焦点则设|背景色为红?br />                    cell.setBackground(Color.red);
                   //cell.setForeground(Color.black);
               } else {
                   if ((row % 2) == 0) {
                     // 偶数行设|ؓ白色
                       cell.setBackground(Color.white);
                   } else {
                     // 奇数行设|ؓ蓝色
                       cell.setBackground(Color.cyan);
                   }
               }
              
               return cell;
       }
}

步骤二:ColorTableCellRenderer讄格的渲染?/p>

 try {
 ColorTableCellRenderer cellRender = new ColorTableCellRenderer();
 table.setDefaultRenderer(Class.forName("java.lang.Object"),
  cellRender);
} catch (Exception e) {
 e.printStackTrace();
}

实现一个将特定单元D|ؓU色的表格渲染器

如右Q如果想成员年龄大?7的单元格讄为红艌Ӏ?br />

AgeTableCellRenderer的代?/p>

public class AgeTableCellRenderer extends DefaultTableCellRenderer {
  private static final long serialVersionUID = -334535475639L;

  public Component getTableCellRendererComponent(
               JTable table,
               Object value,
               boolean isSelected,
               boolean hasFocus,
               int row,
               int column) {
   
               // 得到单元?br />                Component cell =
                       super.getTableCellRendererComponent(
                               table,
                               value,
                               isSelected,
                               hasFocus,
                               row,
                               column);

               // 先把所有单元格讄为白?br />                cell.setBackground(Color.white);
              
               // q行渲染
               if (table.getColumnName(column).equals("q龄") ) { // 如果列名{于“q龄”
                 // 取得单元格的文字
                 String strValue=(String)value;
                
                 if(Pattern.matches("\\d+", strValue)){
                   if(Integer.parseInt(strValue)>37){
                     // 如果是数字且值大?7Q将单元D景设|ؓU色
                     cell.setBackground(Color.red);
                   }                  
                 }
               }
              
               return cell;
       }
}

 



]]>
JTree?wi)控件的使?/title><link>http://www.aygfsteel.com/junglesong/archive/2008/03/03/183580.html</link><dc:creator>junglesong的博?/dc:creator><author>junglesong的博?/author><pubDate>Mon, 03 Mar 2008 15:02:00 GMT</pubDate><guid>http://www.aygfsteel.com/junglesong/archive/2008/03/03/183580.html</guid><wfw:comment>http://www.aygfsteel.com/junglesong/comments/183580.html</wfw:comment><comments>http://www.aygfsteel.com/junglesong/archive/2008/03/03/183580.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/junglesong/comments/commentRss/183580.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/junglesong/services/trackbacks/183580.html</trackback:ping><description><![CDATA[<p><strong>?wi)和节点的基本概?/strong></p> <p>?wi)可以用囑Ş的方式显CZ多的节点以及它们之间的关p,最常见的树(wi)的例子就是目录树(wi)?br /> 所有组成树(wi)的元素都成ؓ节点QNodeQ,一|(wi)的最层的节点称为根节点Q如ProgramQ而没有子节点的节Ҏ(gu)为叶子节点,如domain。在层次l构中,上层的节Ҏ(gu)下层节点的父节点Q而下层节Ҏ(gu)上层节点的子节点Q如图:Program是C# Programs和Programs的父节点QFileBatchRemaer20070801094605是C# Programes的子节点?br /> <img height="238" alt="" src="http://www.aygfsteel.com/images/blogjava_net/junglesong/explorerTree.jpg" width="229" border="0" /><br /> </p> <p><strong>有关?wi)JTree的类和接?/strong></p> <p>JTree                           昄?wi)的核心基本cR?br /> TreeModel                  定义了树(wi)的数据模型接?br /> DefaultTreeModel      默认的树(wi)模型接口实现c?br /> TreeModelListener     ?wi)模型的事g监听?br /> TreePath                      ?wi)\径。一个\径就是一个对象数l,对应于树(wi)模型中从根节点到选定节点上的所有节炚w合。数l的W一个元素是根节点,按树(wi)的层ơ关pMơ在数组中给Z间节点,最后一个元素是选定的节炏V?br /> MutableTreeNode      ?wi)节?gu)口。对应树(wi)中的节点。树(wi)节点接口定义了与父子节点有关的方法。因此,利用?wi)节点可以遍历整|(wi)?br /> DedaultMutableTreeNode 默认的树(wi)节点的实现类?br /> TreeSelectionModel 定义了在?wi)上的选择节点的数据模型接口。树(wi)选择模型军_了选择节点的策略以及被选择节点的信息?br /> TreeSelectionModelListener ?wi)选择模型事g的监听器?/p> <p>代码实例Q构Z|(wi)</p> <p>DefaultMutableTreeNode root = new DefaultMutableTreeNode("Java");</p> <p>DefaultMutableTreeNode j2seNode=new DefaultMutableTreeNode("J2SE(JavaSE)");<br /> DefaultMutableTreeNode swingNode=new DefaultMutableTreeNode("Swing");<br /> DefaultMutableTreeNode socketNode=new DefaultMutableTreeNode("Socket");<br /> DefaultMutableTreeNode threadNode=new DefaultMutableTreeNode("Thread");<br /> j2seNode.add(swingNode);<br /> j2seNode.add(socketNode);<br /> j2seNode.add(threadNode);</p> <p>DefaultMutableTreeNode j2eeNode=new DefaultMutableTreeNode("J2EE(JavaEE)");<br /> DefaultMutableTreeNode jspservletNode=new DefaultMutableTreeNode("Jsp/Servlet");<br /> DefaultMutableTreeNode jdbcNode=new DefaultMutableTreeNode("JDBC");<br /> DefaultMutableTreeNode javaMailNode=new DefaultMutableTreeNode("Java Mail");<br /> j2eeNode.add(jspservletNode);<br /> j2eeNode.add(jdbcNode);<br /> j2eeNode.add(javaMailNode);</p> <p>root.add(j2seNode);<br /> root.add(j2eeNode);<br /> tree = new JTree(root);</p> <p><img height="187" alt="" src="http://www.aygfsteel.com/images/blogjava_net/junglesong/createtrree1.jpg" width="149" border="0" /><br /> 相关语句解释</p> <p>// 创徏一个树(wi)节点Q文字ؓJ2SE(JavaSE)<br /> DefaultMutableTreeNode j2seNode=new DefaultMutableTreeNode("J2SE(JavaSE)");</p> <p>// 创徏一个文字ؓ“Swing”的节点,d在节点j2seNode?br /> DefaultMutableTreeNode swingNode=new DefaultMutableTreeNode("Swing");<br /> j2seNode.add(swingNode);</p> <p>// 创徏一个文字ؓJava的节点作为根节点Q然后以此根节点构徏一|(wi)。j2seNodeQj2eeNode挂在root ?br /> DefaultMutableTreeNode root = new DefaultMutableTreeNode("Java");<br /> .......<br /> root.add(j2seNode);<br /> root.add(j2eeNode);<br /> tree = new JTree(root);</p> <p>注意Q?JTree和JTextAreaQJTable一P也需要放在一个JScrollPane中?/p> <p>l树(wi)控gd监听</p> <p>tree.addTreeSelectionListener(new TreeSelectionListener() {<br />       public void valueChanged(TreeSelectionEvent evt) {<br />           //  取得选择状态变化的所有\?br />           TreePath[] paths = evt.getPaths();<br />   <br />           for (int i=0; i<paths.length; i++) {<br />               // 如果处于选择状?br />               if (evt.isAddedPath(i)) {<br />                 // \径{化ؓ节点数组<br />                 Object[] nodes=paths[i].getPath();<br />                 <br />                 // 得到最后一个节?即选择的节?br />                 DefaultMutableTreeNode node=(DefaultMutableTreeNode)nodes[nodes.length-1];<br />                 <br />                 // 输出节点?br />                 System.out.println(node.toString());              <br />               } <br />           }<br />       }<br />   });</p> <p>额外的一点美化工作:渲染节点</p> <p>// 讑֮叶节点图?br /> Icon leafIcon = new ImageIcon(TreePanel.class.getResource("/leaf.gif"));<br /> // 讑֮关闭状态节点图?br /> Icon closedIcon = new ImageIcon(TreePanel.class.getResource("/close.gif"));<br /> // 讑֮打开状态节点图?br /> Icon openIcon = new ImageIcon(TreePanel.class.getResource("/open.gif"));<br />   <br /> // 取得?wi)的渲染?br /> DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer)tree.getCellRenderer();<br /> renderer.setLeafIcon(leafIcon);// 讑֮叶节点图?br /> renderer.setClosedIcon(closedIcon);// 讑֮关闭状态节点图?br /> renderer.setOpenIcon(openIcon);// 讑֮打开状态节点图?/p> <p> </p> <img src ="http://www.aygfsteel.com/junglesong/aggbug/183580.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/junglesong/" target="_blank">junglesong的博?/a> 2008-03-03 23:02 <a href="http://www.aygfsteel.com/junglesong/archive/2008/03/03/183580.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JTabbedPane选项H格的?/title><link>http://www.aygfsteel.com/junglesong/archive/2008/03/03/183579.html</link><dc:creator>junglesong的博?/dc:creator><author>junglesong的博?/author><pubDate>Mon, 03 Mar 2008 14:57:00 GMT</pubDate><guid>http://www.aygfsteel.com/junglesong/archive/2008/03/03/183579.html</guid><wfw:comment>http://www.aygfsteel.com/junglesong/comments/183579.html</wfw:comment><comments>http://www.aygfsteel.com/junglesong/archive/2008/03/03/183579.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/junglesong/comments/commentRss/183579.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/junglesong/services/trackbacks/183579.html</trackback:ping><description><![CDATA[<p>选项H格JTabbedPane</p> <p>JTabbedPane在Swing中实现选项H格Q它可以把多个组件放在多个选项卡中Q从而ə面不致拥挤Q其选项卡的形式也能为程序增色不?br /> 选项H格和分隔窗格类|创徏出来需要添加到讄好布局的面板中Q通常我们可以讄布局?*1的网格布局或是边界布局?br /> 选项H格内部可以攄多个选项,每个选项都可以容纳一个JPanel作ؓ子组Ӟ我们只要设计好需要添加到选项늚面板卛_?/p> <p>JTabbedPane效果<br /> <img height="456" alt="" src="http://www.aygfsteel.com/images/blogjava_net/junglesong/tabbedpane.jpg" width="459" border="0" /><br /> </p> <p>创徏JTabbedPane</p> <p>// 创徏选项H格<br /> JTabbedPane tabPane = new JTabbedPane();</p> <p>// 讄面板布局为网格布局<br /> this.setLayout(new GridLayout(1,1));<br /> tabPane.setTabPlacement(JTabbedPane.TOP);// 讑֮选项卡放在上?br /> this.add(tabPane);// 选项H格攄在面板中 </p> <p>// 创徏一个StockPanel面板q添加到选项H格,q是指定图标的方?br /> StockPanel stockPanel=new StockPanel();<br /> tabPane.addTab("库存面", new ImageIcon(TabbedPanel.class<br />   .getResource("/stock.gif")), stockPanel);</p> <p>ImportPanel importPanel=new ImportPanel();<br /> tabPane.addTab("q货面", new ImageIcon(TabbedPanel.class<br />   .getResource("/import.gif")), importPanel);</p> <p>// 创徏一个SaledPanel面板q添加到选项H格,q是不指定图标的Ҏ(gu)<br /> SaledPanel saledPanel=new SaledPanel();<br /> tabPane.addTab("已售面",  saledPanel);</p> <p>// 选择W一个选项ؓ当前选择的选项?br /> tabPane.setSelectedIndex(0);<br /> </p> <img src ="http://www.aygfsteel.com/junglesong/aggbug/183579.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/junglesong/" target="_blank">junglesong的博?/a> 2008-03-03 22:57 <a href="http://www.aygfsteel.com/junglesong/archive/2008/03/03/183579.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>分隔H格JSplitPanehttp://www.aygfsteel.com/junglesong/archive/2008/03/03/183577.htmljunglesong的博?/dc:creator>junglesong的博?/author>Mon, 03 Mar 2008 14:52:00 GMThttp://www.aygfsteel.com/junglesong/archive/2008/03/03/183577.htmlhttp://www.aygfsteel.com/junglesong/comments/183577.htmlhttp://www.aygfsteel.com/junglesong/archive/2008/03/03/183577.html#Feedback0http://www.aygfsteel.com/junglesong/comments/commentRss/183577.htmlhttp://www.aygfsteel.com/junglesong/services/trackbacks/183577.htmlJSplitPane可以昄两个lg,可以q排或上下显C?通过拖动出现在两个组件之间的分隔?用户可以指定分隔H格为每一个组件分配多空?通过在分隔窗格内讄分隔H格,可以屏q空间分隔成三个或更多的lg.
除了直接组件添加到分隔H格?通常会将每个lg攄在一个滚动窗g,q用户能拖动滚动条查看lg的Q何部?



创徏分隔H格CZ

// 创徏分隔H口,W一个参数指定了分隔的方?JSplitPane.HORIZONTAL_SPLIT表示水^分隔,另外一个选项是JSplitPane.VERTICAL_SPLIT,表示垂直分隔;另外两个参数是放|在该分隔窗格的lg.
JSplitPane splitPanel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, tablePanel, textPanel);

// 讄分隔器的位置,可以用整?像素)或百分比来指?
splitPanel.setDividerLocation(200);

// 讄分隔器是否显C用来展开/折叠分隔器的控g
splitPanel.setOneTouchExpandable(true);

// 讄分隔器的大小,单位为像?br /> splitPanel.setDividerSize(5);

// 分隔窗口添加到容器?br /> setLayout(new BorderLayout());
add(splitPanel, BorderLayout.CENTER);

 



]]>
Swing中添加事件响应的三种处理方式说明http://www.aygfsteel.com/junglesong/archive/2008/03/03/183575.htmljunglesong的博?/dc:creator>junglesong的博?/author>Mon, 03 Mar 2008 14:49:00 GMThttp://www.aygfsteel.com/junglesong/archive/2008/03/03/183575.htmlhttp://www.aygfsteel.com/junglesong/comments/183575.htmlhttp://www.aygfsteel.com/junglesong/archive/2008/03/03/183575.html#Feedback0http://www.aygfsteel.com/junglesong/comments/commentRss/183575.htmlhttp://www.aygfsteel.com/junglesong/services/trackbacks/183575.html举例说明事g响应

在Swing?事g响应是通过监听器对象来处理事g的方式实行的,q种方式被称Z件委托模?

以JButton举例,它内部有一个名为listenerList的链?在点L钮时,会生一个ActionEvent事g,此后内部会依ơ调用位于listenerList中的每一个actionListener子类实例的actionPerformedҎ(gu),q就是事件响应的q程.

当调用JButton的addActionListenerҎ(gu)? 外界actionListener子类实例的指针就被放入了listenerList?当按钮点M件生时,q个实例的actionPerformedҎ(gu)׃被调?从而按钮的点击事g处理p委托CactionListener子类实例中进行处?

实现ActionListener的三U方?/strong>

1.实现一个ActionListener子类,再把按钮的事件响应委托给q个子类的实例处?q种方式q不常用,我在q里列出是ؓ了教?

2.让界面类实现ActionListener接口,再把事g响应委托l界面类.q种方式适合于处理一些短简单或要求内聚的事件响?

3.用匿名类实现ActionListener接口,再把事g委托l这个匿名类的实?q种方式是Swing事g处理的主?


方式一:实现一个ActionListener子类

// 实现了ActionListener接口的类
public class Button3ActionListener implements ActionListener{
  public void actionPerformed(ActionEvent e) {
    String buttonText=((JButton)e.getSource()).getText();
   
    System.out.println("你按下了" + buttonText);
  }
}

// l按钮三d事g处理
button3.addActionListener(new Button3ActionListener());

方式?让界面类实现ActionListener接口

public class MyFrame extends JFrame implements ActionListener{
  public MyFrame() {
    ....
    button2.addActionListener(this);
  }
 
  /**
   * 按钮二的事g响应在此
   */
  public void actionPerformed(ActionEvent e) {
    if(e.getSource()==button2){
      showMsg("你按下了" + button2.getText());
    }  
  }
}

方式?用匿名类的方式添加事件响?/strong>

button1 = new JButton("按钮一");

button1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        showMsg("你按下了" + button1.getText());
      }
});

 



]]>
使用JFrame创徏H口http://www.aygfsteel.com/junglesong/archive/2008/03/03/183574.htmljunglesong的博?/dc:creator>junglesong的博?/author>Mon, 03 Mar 2008 14:46:00 GMThttp://www.aygfsteel.com/junglesong/archive/2008/03/03/183574.htmlhttp://www.aygfsteel.com/junglesong/comments/183574.htmlhttp://www.aygfsteel.com/junglesong/archive/2008/03/03/183574.html#Feedback1http://www.aygfsteel.com/junglesong/comments/commentRss/183574.htmlhttp://www.aygfsteel.com/junglesong/services/trackbacks/183574.htmlJava.swing包中的JFramecd于创建窗口很有效,它承Containerc?能够包含其它的组?

双昄?strong>创徏H口的代?/strong>和JFrame的几个常用函?

public class MyFrame extends JFrame {
  private static final long serialVersionUID = 1379963724699883220L;

  /**
   * 构造函?br />    *
   */
  public MyFrame() {
    // 讄H口标题
    this.setTitle("E序标题");

    // 定位H口
    this.setLocation(20, 20);
   
    // 讄H口大小
    this.setSize(480, 320);
   
    // 昄H口
    setVisible(true);
  }
 
  public static void main(String[] args){
    new MyFrame();
  }
}

窗口定位在屏幕正中

使用Toolkit.getDefaultToolkit().getScreenSize()Ҏ(gu)可以取得屏幕的大?再调用setLocation函数可以程序定位在屏幕正中.

public class MyFrame extends JFrame {
  private static final long serialVersionUID = 1379963724699883220L;

  /**
   * 构造函?br />    *
   */
  public MyFrame() {
    // 讄H口标题
    this.setTitle("E序标题");

    // 讄E序大小q定位程序在屏幕正中
    setSizeAndCentralizeMe(480, 320);
   
    // 昄H口
    setVisible(true);
  }
 
  // 讄E序大小q定位程序在屏幕正中
  private void setSizeAndCentralizeMe(int width, int height) {
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    this.setSize(width, height);
    this.setLocation(screenSize.width / 2 - width / 2, screenSize.height
        / 2 - height / 2);
  }
 
  public static void main(String[] args){
    new MyFrame();
  }
}

点击H口右上角的关闭按钮关闭H口,退出程?/strong>

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)可以辑ֈ此功?否则按关闭按钮窗口关闭但不退出程?

public class MyFrame extends JFrame {
  private static final long serialVersionUID = 1379963724699883220L;

  /**
   * 构造函?br />    *
   */
  public MyFrame() {
    // 讄H口标题
    this.setTitle("E序标题");

    // 讄E序大小q定位程序在屏幕正中
    setSizeAndCentralizeMe(480, 320);
   
    // 昄H口
    setVisible(true);
   
    // 点击H口右上角的关闭按钮关闭H口,退出程?br />     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
 
  // 讄E序大小q定位程序在屏幕正中
  private void setSizeAndCentralizeMe(int width, int height) {
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    this.setSize(width, height);
    this.setLocation(screenSize.width / 2 - width / 2, screenSize.height
        / 2 - height / 2);
  }
 
  public static void main(String[] args){
    new MyFrame();
  }
}

dH口关闭事g处理

// 点击H口右上角的关闭按钮关闭H口,退出程?br />     this.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.out.println("E序退?");
        System.exit(0);
      }
    });

上面的代码实C一个WindowAdapter的匿名类,q将它注册ؓH口事g的监听器.

public class MyFrame extends JFrame {
  private static final long serialVersionUID = 1379963724699883220L;

  /**
   * 构造函?br />    *
   */
  public MyFrame() {
    // 讄H口标题
    this.setTitle("E序标题");

    // 讄E序大小q定位程序在屏幕正中
    setSizeAndCentralizeMe(480, 320);

    // 昄H口
    setVisible(true);

    // 点击H口右上角的关闭按钮关闭H口,退出程?br />     this.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.out.println("E序退?");
        System.exit(0);
      }
    });
  }

  // 讄E序大小q定位程序在屏幕正中
  private void setSizeAndCentralizeMe(int width, int height) {
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    this.setSize(width, height);
    this.setLocation(screenSize.width / 2 - width / 2, screenSize.height
        / 2 - height / 2);
  }

  public static void main(String[] args) {
    new MyFrame();
  }
}

讄E序感观

UIManager.getInstalledLookAndFeels()可得到可用的感观数组,然后取数l中元素的getClassName()Ҏ(gu)可得到感观类?再调?br /> UIManager.setLookAndFeel(strLookFeel);      SwingUtilities.updateComponentTreeUI(this);
Ҏ(gu)可设|窗口感?

public class MyFrame extends JFrame {
  /**
   * 构造函?br />    *
   */
  public MyFrame() {
    // 讄H口标题
    this.setTitle("E序标题");

    // 讄E序大小q定位程序在屏幕正中
    setSizeAndCentralizeMe(480, 320);

    // 昄H口
    setVisible(true);

    // 讄E序感观
    setupLookAndFeel();

    ....;
  }
...

  // 讄E序感观
  private void setupLookAndFeel() {
    // 取得pȝ当前可用感观数组
    UIManager.LookAndFeelInfo[] arr = UIManager.getInstalledLookAndFeels();
   
    Random random = new Random();
    String strLookFeel=arr[random.nextInt(arr.length)].getClassName();

    try {
      UIManager.setLookAndFeel(strLookFeel);
      SwingUtilities.updateComponentTreeUI(this);
    } catch (Exception e) {
      System.out.println("Can't Set Lookandfeel Style to " + strLookFeel);
    }
  }
....
}

讄E序感观q_的感?/strong>

UIManager.getCrossPlatformLookAndFeelClassName()可得到跨q_的感?

public class MyFrame extends JFrame {
  public MyFrame() {
    // 讄H口标题
    this.setTitle("E序标题");

    // 讄E序大小q定位程序在屏幕正中
    setSizeAndCentralizeMe(480, 320);

    // 昄H口
    setVisible(true);

    // 讄E序感观
    setupLookAndFeel();
  }

  // 讄E序感观
  private void setupLookAndFeel() {
    String strLookFeel = UIManager.getCrossPlatformLookAndFeelClassName();

    try {
      UIManager.setLookAndFeel(strLookFeel);
    } catch (Exception e) {
      System.out.println("Can't Set Lookandfeel Style to " + strLookFeel);
    }
  }
}



]]>
Swing常用lghttp://www.aygfsteel.com/junglesong/archive/2008/03/03/183573.htmljunglesong的博?/dc:creator>junglesong的博?/author>Mon, 03 Mar 2008 14:42:00 GMThttp://www.aygfsteel.com/junglesong/archive/2008/03/03/183573.htmlhttp://www.aygfsteel.com/junglesong/comments/183573.htmlhttp://www.aygfsteel.com/junglesong/archive/2008/03/03/183573.html#Feedback0http://www.aygfsteel.com/junglesong/comments/commentRss/183573.htmlhttp://www.aygfsteel.com/junglesong/services/trackbacks/183573.html面板cJPanel

JPanelcd用来作ؓ一批组件如JButton,JTextBox{的容器,一般来说对它的常见操作有设|其Ҏ(gu),讄其布局{?

讄Ҏ(gu)代码:
setBorder(BorderFactory.createTitledBorder(title));

讄布局代码CZ:
setLayout(new GridLayout(4, 1));
add(nameInputPanel);
add(ageInputPanel);
add(titleInputPanel);
add(ButtonsPanel);

按钮cJButton

当我们需要向界面d按钮旉要用到JButtonc?以下是它的一些常用方?/p>

1.创徏Buttoncd?br /> JButton csvButton=new JButton("csv下蝲");

2.讄按钮的最大尺?最尺?首选尺?
Dimension dimension = new Dimension(80, 20);
csvButton.setMaximumSize(dimension);
csvButton.setMinimumSize(dimension);
csvButton.setPreferredSize(dimension);

单选框JRadioButton

我们需要单选按钮时需要用到JRadioButton,它的常用Ҏ(gu)如下:
1.创徏
JRadioButton xmlRadio=new JRadioButton("Xml",true);
JRadioButton db4oRadio=new JRadioButton("Db4o",false);

2.分组
ButtonGroup group = new ButtonGroup();
group.add(xmlRadio);
group.add(db4oRadio);
group.add(sqlRadio);
group.add(hibenateRadio);

3.取得单个JRadioButton是否被选择
boolean isSelected=db4oRadio.isSelected()

4.取得一lJRadioButton中被选择的单元的文字
        for (Enumeration e=group.getElements(); e.hasMoreElements(); ) {
            JRadioButton b = (JRadioButton)e.nextElement();
            if (b.getModel() == group.getSelection()) {
                return b.getText();
            }
        }

标签lgJLabel

JLabel是标{控?也是Swinglg中最单常用的一?

创徏JLabel:
JLabel label=new JLabel(“ABC");

修改标签文字
label.setText("DEF");

单行文本框JTextField

需要输入单行文字时我们可以用到JTextField,它的使用也很?
创徏:
JTextField textBox=new JTextField();

讄文本框文?
textBox.setText("ABC");

取得文本框文?
String text=textBox.getText();

复合框JComboBox

JComboBox是既能提供输入又能提供选择一的选择控g.

1) 创徏JComboBox
String[] items = {"item1", "item2"};
JComboBox editableCB = new JComboBox(items); editableCB.setEditable(true);

表格控gJTable

表格控g是相对复杂的Swing控g之一,使用也相对复?

1) 创徏表格控g
JTable table = new JTable();

2) 讄表格行高
table.setRowHeight(20);

3) 讄表格的行数和列数
DefaultTableModel tableModel = (DefaultTableModel) table
.getModel();
tableModel.setColumnCount(0);
tableModel.setRowCount(0);

4) l表格添加表?br /> String[] headers = {"姓名","q龄", "职务"};

for (int i = 0; i < headers.length; i++) {
      tableModel.addColumn(headers[i]);
}

5) 向表格添加内?br />  public void fillTable(List<Member> members){
    DefaultTableModel tableModel = (DefaultTableModel) table
    .getModel();
    tableModel.setRowCount(0);
   
    for(Member member:members){
      String[] arr=new String[5];
      arr[0]=member.getName();
      arr[1]=member.getAge();
      arr[2]=member.getTitle();
     
      tableModel.addRow(arr);
    }
   
    table.invalidate();
  }

6) 取得表格内的内容
public List<Member> getShowMembers(){
    List<Member> members=new ArrayList<Member>();
   
    DefaultTableModel tableModel = (DefaultTableModel) table
    .getModel();
   
    int rowCount=tableModel.getRowCount();
   
    for(int i=0;i<rowCount;i++){
      Member member=new Member();
      member.setName((String)tableModel.getValueAt(i, 0));
      member.setAge((String)tableModel.getValueAt(i, 1));
      member.setTitle((String)tableModel.getValueAt(i, 2));
     
      members.add(member);
    }
   
    return members;
  }


 



]]>
扩展DefaultTreeCellRenderer创徏自己的树(wi)节点渲染器示例?http://www.aygfsteel.com/junglesong/archive/2008/02/22/181243.htmljunglesong的博?/dc:creator>junglesong的博?/author>Fri, 22 Feb 2008 01:12:00 GMThttp://www.aygfsteel.com/junglesong/archive/2008/02/22/181243.htmlhttp://www.aygfsteel.com/junglesong/comments/181243.htmlhttp://www.aygfsteel.com/junglesong/archive/2008/02/22/181243.html#Feedback0http://www.aygfsteel.com/junglesong/comments/commentRss/181243.htmlhttp://www.aygfsteel.com/junglesong/services/trackbacks/181243.html
// 讑֮叶节点图?/span>
Icon leafIcon = new ImageIcon(TreeViewPanel.class
        .getResource(
"/leaf.gif"));
// 讑֮关闭状态节点图?/span>
Icon closedIcon = new ImageIcon(TreeViewPanel.class
        .getResource(
"/close.gif"));
// 讑֮打开状态节点图?/span>
Icon openIcon = new ImageIcon(TreeViewPanel.class
        .getResource(
"/open.gif"));

// 取得?wi)的渲染?/span>
DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer) tree
        .getCellRenderer();

// 讑֮叶节点图?/span>
renderer.setLeafIcon(leafIcon);

// 讑֮关闭状态节点图?/span>
renderer.setClosedIcon(closedIcon);

// 讑֮打开状态节点图?/span>
renderer.setOpenIcon(openIcon);

但这L(fng)zL不高,如我x层的图标都不一样就不能使用q种Ҏ(gu)了,我想要的效果如下Q?br />

q时我们只有扩展DefaultTreeCellRenderer创徏自己的树(wi)节点渲染器,我创建的渲染器代码如下:
package com.sitinspring.common.render;

import java.awt.Component;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.TreeNode;

/**
 * ?wi)节?gu)染器
 * 
@author: sitinspring(junglesong@gmail.com)
 * @date: 2008-2-12
 
*/

public class TreeNodeRenderer extends DefaultTreeCellRenderer{
    
private static final long serialVersionUID = 8532405600839140757L;
    
    
// 數據庫圖?頂層點用
    private static final Icon databaseIcon = new ImageIcon(TreeNodeRenderer.class
            .getResource(
"/database.gif"));
    
    
// 表圖?W三層節點用
    private static final Icon tableIcon = new ImageIcon(TreeNodeRenderer.class
            .getResource(
"/leaf.gif"));
    
    
// 表空間關閉狀態圖?關閉狀態的W二層節點用
    private static final Icon tableSpaceCloseIcon = new ImageIcon(TreeNodeRenderer.class
            .getResource(
"/close.gif"));
    
    
// 表空間關閉狀態圖?打開狀態的W二層節點用
    private static final Icon tableSpaceOpenIcon = new ImageIcon(TreeNodeRenderer.class
            .getResource(
"/open.gif"));
    
    
public Component getTreeCellRendererComponent(JTree tree,
                                                  Object value,
                                                  
boolean sel,
                                                  
boolean expanded,
                                                  
boolean leaf,
                                                  
int row,
                                                  
boolean hasFocus){
         
super.getTreeCellRendererComponent(tree,   
                                            value,
                                            sel,   
                                            expanded,   
                                            leaf,   
                                            row,   
                                            hasFocus);   
        
// 取得?/span>
        DefaultMutableTreeNode node=(DefaultMutableTreeNode)value;
        
        
// 取得路徑
        TreeNode[] paths = node.getPath();
        
        
// 按\径层ơ赋予不同的图标
        if (paths.length == 3{            
            setIcon(tableIcon);
        }
else if(paths.length == 2){
            
// 按展開情況再賦予不同的圖?/span>
            if(expanded){
                setIcon(tableSpaceOpenIcon);
            }

            
else{
                setIcon(tableSpaceCloseIcon);
            }

        }

        
else if(paths.length == 1){
            setIcon(databaseIcon);
        }

        
        
return this;        
    }

}

使用q个渲染器用以下代码就行了Q?br />
tree.setCellRenderer(new TreeNodeRenderer());

以上?

]]>
վ֩ģ壺 | ˮ| ¡| ˮ| ʡ| | ҽ| ʯ| | Dz| | | Ӣ| ƽ| ʯ̨| | | з| Ʊ| | ư| | | ԫ| ϲ| | | | | | ֶ| ԭ| ͭ| | | | ɽ| | | | |