使用渲染器增加工具提示 : 标签面板 « Swing « Java 教程

En
Java 教程
1. 语言基础
2. 数据类型
3. 操作符
4. 流程控制
5. 类定义
6. 开发相关
7. 反射
8. 正则表达式
9. 集合
10. 线
11. 文件
12. 泛型
13. 本土化
14. Swing
15. Swing事件
16. 二维图形
17. SWT
18. SWT 二维图形
19. 网络
20. 数据库
21. Hibernate
22. JPA
23. JSP
24. JSTL
25. Servlet
26. Web服务SOA
27. EJB3
28. Spring
29. PDF
30. 电子邮件
31. 基于J2ME
32. J2EE应用
33. XML
34. 设计模式
35. 日志
36. 安全
37. Apache工具
38. 蚂蚁编译
39. JUnit单元测试
Java
Java 教程 » Swing » 标签面板 
14. 51. 5. 使用渲染器增加工具提示
使用渲染器增加工具提示
/*
 *
 * Copyright (c) 1998 Sun Microsystems, Inc. All Rights Reserved.
 *
 * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use,
 * modify and redistribute this software in source and binary code form,
 * provided that i) this copyright notice and license appear on all copies of
 * the software; and ii) Licensee does not utilize the software in a manner
 * which is disparaging to Sun.
 *
 * This software is provided "AS IS," without a warranty of any kind. ALL
 * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
 * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
 * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE
 * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
 * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS
 * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
 * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
 * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
 * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGES.
 *
 * This software is not designed or intended for use in on-line control of
 * aircraft, air traffic, aircraft navigation or aircraft communications; or in
 * the design, construction, operation or maintenance of any nuclear
 * facility. Licensee represents and warrants that it will not use or
 * redistribute the Software for such purposes.
 */

import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridLayout;

import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;

public class TableRenderDemo extends JPanel {
  private boolean DEBUG = false;

  public TableRenderDemo() {
    super(new GridLayout(10));

    JTable table = new JTable(new MyTableModel());
    table.setPreferredScrollableViewportSize(new Dimension(50070));

    // Create the scroll pane and add the table to it.
    JScrollPane scrollPane = new JScrollPane(table);

    // Set up column sizes.
    initColumnSizes(table);

    // Fiddle with the Sport column's cell editors/renderers.
    setUpSportColumn(table, table.getColumnModel().getColumn(2));

    // Add the scroll pane to this panel.
    add(scrollPane);
  }

  /*
   * This method picks good column sizes. If all column heads are wider than the
   * column's cells' contents, then you can just use column.sizeWidthToFit().
   */
  private void initColumnSizes(JTable table) {
    MyTableModel model = (MyTableModeltable.getModel();
    TableColumn column = null;
    Component comp = null;
    int headerWidth = 0;
    int cellWidth = 0;
    Object[] longValues = model.longValues;
    TableCellRenderer headerRenderer = table.getTableHeader().getDefaultRenderer();

    for (int i = 0; i < 5; i++) {
      column = table.getColumnModel().getColumn(i);

      comp = headerRenderer.getTableCellRendererComponent(null, column.getHeaderValue(), false,
          false, 00);
      headerWidth = comp.getPreferredSize().width;

      comp = table.getDefaultRenderer(model.getColumnClass(i)).getTableCellRendererComponent(table,
          longValues[i], false, false, 0, i);
      cellWidth = comp.getPreferredSize().width;

      if (DEBUG) {
        System.out.println("Initializing width of column " + i + ". " "headerWidth = "
            + headerWidth + "; cellWidth = " + cellWidth);
      }

      // XXX: Before Swing 1.1 Beta 2, use setMinWidth instead.
      column.setPreferredWidth(Math.max(headerWidth, cellWidth));
    }
  }

  public void setUpSportColumn(JTable table, TableColumn sportColumn) {
    // Set up the editor for the sport cells.
    JComboBox comboBox = new JComboBox();
    comboBox.addItem("Snowboarding");
    comboBox.addItem("Rowing");
    comboBox.addItem("Knitting");
    comboBox.addItem("Speed reading");
    comboBox.addItem("Pool");
    comboBox.addItem("None of the above");
    sportColumn.setCellEditor(new DefaultCellEditor(comboBox));

    // Set up tool tips for the sport cells.
    DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
    renderer.setToolTipText("Click for combo box");
    sportColumn.setCellRenderer(renderer);
  }

  class MyTableModel extends AbstractTableModel {
    private String[] columnNames = "First Name""Last Name""Sport""# of Years""Vegetarian" };

    private Object[][] data = {
        "Mary""Campione""Snowboarding"new Integer(5)new Boolean(false) },
        "Alison""Huml""Rowing"new Integer(3)new Boolean(true) },
        "Kathy""Walrath""Knitting"new Integer(2)new Boolean(false) },
        "Sharon""Zakhour""Speed reading"new Integer(20)new Boolean(true) },
        "Philip""Milne""Pool"new Integer(10)new Boolean(false) } };

    public final Object[] longValues = "Sharon""Campione""None of the above",
        new Integer(20), Boolean.TRUE };

    public int getColumnCount() {
      return columnNames.length;
    }

    public int getRowCount() {
      return data.length;
    }

    public String getColumnName(int col) {
      return columnNames[col];
    }

    public Object getValueAt(int row, int col) {
      return data[row][col];
    }

    /*
     * JTable uses this method to determine the default renderer/ editor for
     * each cell. If we didn't implement this method, then the last column would
     * contain text ("true"/"false"), rather than a check box.
     */
    public Class getColumnClass(int c) {
      return getValueAt(0, c).getClass();
    }

    /*
     * Don't need to implement this method unless your table's editable.
     */
    public boolean isCellEditable(int row, int col) {
      // Note that the data/cell address is constant,
      // no matter where the cell appears onscreen.
      if (col < 2) {
        return false;
      else {
        return true;
      }
    }

    /*
     * Don't need to implement this method unless your table's data can change.
     */
    public void setValueAt(Object value, int row, int col) {
      if (DEBUG) {
        System.out.println("Setting value at " + row + "," + col + " to " + value
            " (an instance of " + value.getClass() ")");
      }

      data[row][col= value;
      fireTableCellUpdated(row, col);

      if (DEBUG) {
        System.out.println("New value of data:");
        printDebugData();
      }
    }

    private void printDebugData() {
      int numRows = getRowCount();
      int numCols = getColumnCount();

      for (int i = 0; i < numRows; i++) {
        System.out.print("    row " + i + ":");
        for (int j = 0; j < numCols; j++) {
          System.out.print("  " + data[i][j]);
        }
        System.out.println();
      }
    }
  }

  public static void main(String[] args) {
    JFrame frame = new JFrame("TableRenderDemo");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    // Create and set up the content pane.
    TableRenderDemo newContentPane = new TableRenderDemo();
    newContentPane.setOpaque(true)// content panes must be opaque
    frame.setContentPane(newContentPane);

    // Display the window.
    frame.pack();
    frame.setVisible(true);
  }
}
14. 51. 标签面板
14. 51. 1. 第一次使用JTabbedPane
14. 51. 2. 添加和删除标签添加和删除标签
14. 51. 3. 获得第一个标签索引相匹配的图标
14. 51. 4. Changing tab's title, icon, mnemonic, tooltip, or component on a particular tab with one of the setXXXAt() methodsChanging tab's title, icon, mnemonic, tooltip, or component  on a particular tab with one of the setXXXAt() methods
14. 51. 5. 使用渲染器增加工具提示使用渲染器增加工具提示
14. 51. 6. 指定标签的位置:顶部,底部,左边或右边指定标签的位置:顶部,底部,左边或右边
14. 51. 7. 不断变化背景,前景和图标不断变化背景,前景和图标
14. 51. 8. To remove a tab, you can remove a specific tab with removeTabAt(int index), remove(int index), or remove(Component component)To remove a tab, you can remove a specific tab with  removeTabAt(int index), remove(int index), or remove(Component component)
14. 51. 9. 监听所选标签的变化监听所选标签的变化
14. 51. 10. TabLayout政策:SCROLL_TAB_LAYOUT或WRAP_TAP_LAYOUTTabLayout政策:SCROLL_TAB_LAYOUT或WRAP_TAP_LAYOUT
14. 51. 11. 添加组件到JTabbedPane
14. 51. 12. New Methods in the JTabPane Component (Add component to JTabPane)
14. 51. 13. JTabPane与TextField标签JTabPane与TextField标签
14. 51. 14. 添加用户图标标签面板添加用户图标标签面板
14. 51. 15. 添加按钮到标签栏添加按钮到标签栏
14. 51. 16. 添加一个标签
14. 51. 17. 添加一个标签,标签在最后
14. 51. 18. 添加一个标签,标签和图标在最后
14. 51. 19. Add a tab with a label, icon, and tool tip at the end of all tabs
14. 51. 20. 标签JTabbedPane
14. 51. 21. 在JTabbedPane启用滚动标签
14. 51. 22. Enabling the Selection of a Tab in a JTabbedPane Container Using a Keystroke
14. 51. 23. JTabbedPane启用和禁用表
14. 51. 24. 设置颜色标签,JTabbedPane
14. 51. 25. 设置工具提示JTabbedPane
14. 51. 26. 设置的位置JTabbedPane标签
14. 51. 27. Determining When the Selected Tab Changes in a JTabbedPane Container
14. 51. 28. 移动定位JTabbedPane
14. 51. 29. 插入标签到第一个标签后
14. 51. 30. 得到索引标签
14. 51. 31. Getting and Setting the Selected Tab in a JTabbedPane Container
14. 51. 32. 设置大小分隔符JSplitPane
14. 51. 33. 自定义JTabbedPane外观
www.java2java.com | Contact Us
Copyright 2010 - 2030 Java Source and Support. All rights reserved.
All other trademarks are property of their respective owners.