HelloWorld 善戰者,求之于勢,不責于人;故能擇人而任勢。

          知止而后有定,定而后能靜,靜而后能安,安而后能慮,慮而后能得。物有本末,事有終始。知所先后,則近道矣。

            BlogJava :: 首頁 ::  :: 聯系 ::  :: 管理 ::
            167 隨筆 :: 1 文章 :: 40 評論 :: 0 Trackbacks

          這個例子是JTable可以選擇行和列,界面如圖


          代碼如下

          import java.awt.BorderLayout;
          import java.awt.GridLayout;
          import java.awt.event.ActionEvent;
          import java.awt.event.ActionListener;

          import javax.swing.JCheckBox;
          import javax.swing.JFrame;
          import javax.swing.JLabel;
          import javax.swing.JPanel;
          import javax.swing.JScrollPane;
          import javax.swing.JTable;
          import javax.swing.ListSelectionModel;
          import javax.swing.event.ListSelectionEvent;
          import javax.swing.event.ListSelectionListener;
          import javax.swing.table.AbstractTableModel;
          import javax.swing.table.TableModel;

          public class A7_SelectionModel extends JFrame {
              
          public A7_SelectionModel() {
                  
          super("Selection Model Test");
                  setSize(
          450350);
                  
          this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                  
                  TableModel m 
          = new AbstractTableModel() {
                      
          public int getColumnCount() {
                          
          return 10;
                      }

                      
          public int getRowCount() {
                          
          return 10;
                      }

                      
          public Object getValueAt(int r, int c) {
                          
          return "" + (r+1)*(c+1);
                      }            
                  };
                  
                  
          final JTable jt = new JTable(m);
                  
                  
          this.getContentPane().add(new JScrollPane(jt), BorderLayout.CENTER);
                  
                  JPanel controlPanel, buttonPanel, columnPanel, rowPanel;
                  
                  buttonPanel 
          = new JPanel();
                  
          final JCheckBox cellBox, columnBox, rowBox;
                  cellBox 
          = new JCheckBox("Cells", jt.getCellSelectionEnabled());
                  columnBox 
          = new JCheckBox("Columns", jt.getColumnSelectionAllowed());
                  rowBox 
          = new JCheckBox("Rows", jt.getRowSelectionAllowed());
                  
                  cellBox.addActionListener(
          new ActionListener() {
                      
          public void actionPerformed(ActionEvent e) {
                          jt.setCellSelectionEnabled(cellBox.isSelected());
                          columnBox.setSelected(jt.getColumnSelectionAllowed());
                          rowBox.setSelected(jt.getRowSelectionAllowed());
                      }
                  });
                  columnBox.addActionListener(
          new ActionListener() {
                      
          public void actionPerformed(ActionEvent e) {
                          jt.setColumnSelectionAllowed(columnBox.isSelected());
                          cellBox.setSelected(jt.getCellSelectionEnabled());
                      }
                  });
                  rowBox.addActionListener(
          new ActionListener() {
                      
          public void actionPerformed(ActionEvent e) {
                          jt.setRowSelectionAllowed(rowBox.isSelected());
                          cellBox.setSelected(jt.getCellSelectionEnabled());
                      }
                  });
                  
                  buttonPanel.add(
          new JLabel("Selections allowed:"));
                  buttonPanel.add(cellBox);
                  buttonPanel.add(columnBox);
                  buttonPanel.add(rowBox);
                  
                  columnPanel 
          = new JPanel();
                  ListSelectionModel csm 
          = jt.getColumnModel().getSelectionModel();
                  JLabel columnCounter 
          = new JLabel("(Selected Column INdices Go Here)");
                  csm.addListSelectionListener(
          new SelectionDebugger(columnCounter, csm));
                  columnPanel.add(
          new JLabel("Selected columns:"));
                  columnPanel.add(columnCounter);
                  
                  rowPanel 
          = new JPanel();
                  ListSelectionModel rsm 
          = jt.getColumnModel().getSelectionModel();
                  JLabel rowCounter 
          = new JLabel("(Selected Row INdices Go Here)");
                  rsm.addListSelectionListener(
          new SelectionDebugger(columnCounter, csm));
                  rowPanel.add(
          new JLabel("Selected Rows:"));
                  rowPanel.add(rowCounter);
                  
                  controlPanel 
          = new JPanel(new GridLayout(01));
                  controlPanel.add(buttonPanel);
                  controlPanel.add(columnPanel);
                  controlPanel.add(rowPanel);
                  
                  
          this.getContentPane().add(controlPanel, BorderLayout.SOUTH);
                  
              }
              
          class SelectionDebugger implements ListSelectionListener  {
                  JLabel debugger;
                  ListSelectionModel model;
                  
          public SelectionDebugger(JLabel l, ListSelectionModel m) {
                      
          this.debugger = l;
                      
          this.model = m;
                  }
                  
          public void valueChanged(ListSelectionEvent e) {
                      
          if (!e.getValueIsAdjusting()) {
                          StringBuffer buf 
          = new StringBuffer();
                          
          int[] selecton = getSelectonIndices(model.getMinSelectionIndex(),
                                  model.getMaxSelectionIndex());
                          
          if (selecton.length == 0) {
                              buf.append(
          "NONE");
                          } 
          else {
                              
          for (int i = 0; i < selecton.length - 1; i++) {
                                  buf.append(selecton[i]);
                                  buf.append(
          ",");
                              }
                              buf.append(selecton[selecton.length 
          - 1]);
                          }
                          debugger.setText(buf.toString());
                      }
                  }
                  
                  
          protected int[] getSelectonIndices(int start, int stop) {
                      
          if ((start == -1|| (stop == -1)) {
                          
          return new int[0];
                      }
                      
                      
          int guesses[] = new int[stop - start + 1];
                      
          int index = 0;
                      
          for (int i = start; i <= stop; i++) {
                          
          if (model.isSelectedIndex(i)) {
                              guesses[index
          ++= i;
                          }
                      }
                      
          int realthing[] = new int[index];
                      System.arraycopy(guesses, 
          0, realthing, 0, index);
                      
          return realthing;
                  }
                  
                  
              }
              
          public static void main(String args[]) {
                  AbmUtils.setLookAndFeel();
                  A7_SelectionModel s 
          = new A7_SelectionModel();
                  s.setVisible(
          true);
              }
          }


          </script>

          posted on 2008-02-29 16:32 helloworld2008 閱讀(1322) 評論(0)  編輯  收藏 所屬分類: java - swing

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 晋城| 惠水县| 迁安市| 永城市| 于都县| 泉州市| 科尔| 邢台县| 罗城| 山阳县| 自治县| 九江市| 延吉市| 连云港市| 德清县| 西丰县| 清新县| 仙居县| 洛扎县| 丰镇市| 遵义市| 汾西县| 马龙县| 托里县| 开鲁县| 屏南县| 天等县| 安康市| 平罗县| 杭锦后旗| 上杭县| 萍乡市| 茂名市| 墨竹工卡县| 望江县| 山东省| 民县| 上高县| 新巴尔虎左旗| 郧西县| 神池县|