內蒙古java團隊

          j2se,j2ee開發組
          posts - 139, comments - 212, trackbacks - 0, articles - 65
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          在JTable中放置JTextarea

          Posted on 2006-11-26 13:30 帥子 閱讀(584) 評論(0)  編輯  收藏 所屬分類: j2se技術專區
          今天需要做一個界面,JTable的其中最后一列的顯示的文字比較多,而且需要分行顯示。JTable默認所存放的CellRenderer是JTextField,無法滿足要求,經過google在網上查找相關資料,大多數實現并沒有實現根據textarear里面文字信息的多少決定textarea的高度。寫了一個實現,請大家參考一下。


          package?com.ideal.ieai.adaptors.taskadaptor.usertask.view.timeout;

          import?java.awt.BorderLayout;
          import?java.awt.Component;
          import?java.awt.FlowLayout;
          import?java.awt.GridBagConstraints;
          import?java.awt.GridBagLayout;

          import?javax.swing.DefaultCellEditor;
          import?javax.swing.JButton;
          import?javax.swing.JPanel;
          import?javax.swing.JScrollPane;
          import?javax.swing.JTable;
          import?javax.swing.JTextArea;
          import?javax.swing.JTextField;
          import?javax.swing.JTextPane;
          import?javax.swing.border.TitledBorder;
          import?javax.swing.table.DefaultTableCellRenderer;
          import?javax.swing.table.DefaultTableModel;
          import?javax.swing.table.TableCellEditor;
          import?javax.swing.table.TableColumn;
          import?javax.swing.table.TableColumnModel;
          import?javax.swing.table.TableModel;

          public?class?TimeoutPanel?extends?JPanel
          {

          ????private?JScrollPane???????_scrlRules?????=?null;
          ????private?JTable????????????_tblRules??????=?null;
          ????private?JPanel????????????_panelCtrl?????=?null;
          ????private?JButton???????????_btnAdd????????=?null;
          ????private?JButton???????????_btnEdit???????=?null;
          ????private?JButton???????????_btnDel????????=?null;
          ????private?DefaultTableModel?_tblModelRules?=?null;
          ????private?JTextPane?????????_sumaryTxtPane?=?null;

          ????/**
          ?????*?This?is?the?default?constructor
          ?????*/
          ????public?TimeoutPanel()
          ????{
          ????????super();
          ????????initialize();
          ????}

          ????/**
          ?????*?This?method?initializes?this
          ?????*?
          ?????*?@return?void
          ?????*/
          ????private?void?initialize?()
          ????{
          ????????setLayout(new?BorderLayout());
          ????????add(getScrlRules(),?BorderLayout.CENTER);
          ????????add(getPanelCtrl(),?BorderLayout.SOUTH);
          ????????this.setSize(500,?400);
          ????}

          ????private?Component?getPanelCtrl?()
          ????{
          ????????if?(null?==?_panelCtrl)
          ????????{
          ????????????_panelCtrl?=?new?JPanel();
          ????????????_panelCtrl.setLayout(new?FlowLayout(FlowLayout.RIGHT,?4,?4));
          ????????????_panelCtrl.add(getBtnAdd());
          ????????????_panelCtrl.add(getBtnEdit());
          ????????????_panelCtrl.add(getBtnDel());
          ????????}
          ????????return?_panelCtrl;
          ????}

          ????private?Component?getBtnDel?()
          ????{
          ????????if?(null?==?_btnDel)
          ????????{
          ????????????_btnDel?=?new?JButton("delete");
          ????????}
          ????????return?_btnDel;
          ????}

          ????private?Component?getBtnEdit?()
          ????{
          ????????if?(null?==?_btnEdit)
          ????????{
          ????????????_btnEdit?=?new?JButton("edit");
          ????????}
          ????????return?_btnEdit;
          ????}

          ????private?Component?getBtnAdd?()
          ????{
          ????????if?(null?==?_btnAdd)
          ????????{
          ????????????_btnAdd?=?new?JButton("add");
          ????????}
          ????????return?_btnAdd;
          ????}

          ????private?Component?getScrlRules?()
          ????{
          ????????if?(null?==?_scrlRules)
          ????????{
          ????????????_scrlRules?=?new?JScrollPane();
          ????????????_scrlRules.getViewport().add(getTblRules());
          ????????}
          ????????return?_scrlRules;
          ????}

          ????private?Component?getTblRules?()
          ????{
          ????????if?(null?==?_tblRules)
          ????????{
          ????????????_tblRules?=?new?JTable();
          ????????????_tblRules.setModel(getTblModelRules());

          ????????????_tblRules.getColumnModel().getColumn(5).setCellRenderer(new?DefaultTableCellRenderer()
          ????????????{
          ????????????????public?Component?getTableCellRendererComponent?(?JTable?table,?Object?value,
          ????????????????????????boolean?isSelected,?boolean?hasFocus,?int?row,?int?column?)
          ????????????????{
          ????????????????????getSumaryTxtPane().setText((String)?value);
          ????????????????????TableColumnModel?columnModel?=?table.getColumnModel();
          ????????????????????getSumaryTxtPane().setSize(columnModel.getColumn(column).getWidth(),?100000);
          ????????????????????int?heightWanted?=?(int)?getSumaryTxtPane().getPreferredSize().getHeight();
          ????????????????????if?(heightWanted?!=?table.getRowHeight(row))
          ????????????????????{
          ????????????????????????table.setRowHeight(row,?heightWanted);
          ????????????????????}
          ????????????????????return?getSumaryTxtPane();
          ????????????????}
          ????????????});
          ????????}
          ????????return?_tblRules;
          ????}

          ????private?JTextPane?getSumaryTxtPane?()
          ????{
          ????????if?(null?==?_sumaryTxtPane)
          ????????{
          ????????????_sumaryTxtPane?=?new?JTextPane();
          ????????}
          ????????return?_sumaryTxtPane;
          ????}

          ????private?TableModel?getTblModelRules?()
          ????{
          ????????if?(null?==?_tblModelRules)
          ????????{
          ????????????_tblModelRules?=?new?DefaultTableModel()
          ????????????{
          ????????????????public?boolean?isCellEditable?(?int?row,?int?colum?)
          ????????????????{
          ????????????????????return?false;
          ????????????????}
          ????????????};
          ????????????_tblModelRules.addColumn("Rule?Name");
          ????????????_tblModelRules.addColumn("Type");
          ????????????_tblModelRules.addColumn("Timeout");
          ????????????_tblModelRules.addColumn("Task?Status");
          ????????????_tblModelRules.addColumn("Alert?Type");
          ????????????_tblModelRules.addColumn("Sumary");
          ????????????_tblModelRules
          ????????????????????.addRow(new?Object[]?{?"rule1",?"type1",?"timeout1",?"task?status",
          ????????????????????????????"alert?type1",
          ????????????????????????????"a\na\na\na"?});
          ????????????_tblModelRules
          ????????????????????.addRow(new?Object[]?{?"rule1",?"type1",?"timeout1",?"task?status",
          ????????????????????????????"alert?type1",
          ????????????????????????????"a\na\na\na"?});
          ????????????_tblModelRules
          ????????????.addRow(new?Object[]?{?"rule1",?"type1",?"timeout1",?"task?status",
          ????????????????????"alert?type1",
          ????????????????????"a\na\na\na"?});
          ????????????_tblModelRules
          ????????????.addRow(new?Object[]?{?"rule1",?"type1",?"timeout1",?"task?status",
          ????????????????????"alert?type1",
          ????????????????????"a\na\na\na"?});
          ????????}
          ????????return?_tblModelRules;
          ????}

          }


          控制的關鍵在這一段代碼:
          getSumaryTxtPane().setSize(columnModel.getColumn(column).getWidth(),?100000);
          其中100000可以變成>=7的數字都是可以的
          主站蜘蛛池模板: 淳安县| 平安县| 交口县| 吉林省| 鄂托克旗| 沈丘县| 白水县| 尚志市| 兴文县| 罗城| 准格尔旗| 海淀区| 汽车| 英山县| 扬中市| 寿阳县| 昭通市| 广平县| 内乡县| 肃南| 诸城市| 噶尔县| 桐庐县| 南木林县| 浑源县| 宁远县| 迁西县| 东明县| 宁夏| 融水| 德惠市| 太湖县| 兰考县| 尉氏县| 惠安县| 晋江市| 基隆市| 南川市| 大余县| 泗阳县| 夏河县|