在點選按鈕時,觸發複選框中選中的內容
阿新 • • 發佈:2019-02-08
package sftp;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.table.*;
public class MyFirstJFrame extends JFrame {
// 作為測試的main方法
public static void main(String[] args) {
new MyFirstJFrame().setVisible(true);
}
/**
* 構造方法
*/
public MyFirstJFrame() {
InitialComponent();
}
/**
* 初始化元件的方法
*/
private void InitialComponent(){
// 設定窗體引數
// 設定佈局模式
setLayout(null);
// 設定窗體大小
setSize(480, 360);
// 設定窗體居中(非常規方法)
setLocationRelativeTo(null);
// 關閉窗體退出程式
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
// 初始化面板
panel = new JPanel();
panel.setSize(this.getWidth(), this.getHeight());
panel.setLocation(0,0);
panel.setLayout(null);
// 初始化表格
table = new JTable(
new DefaultTableModel(
new Object[][]{
{"第一行"},
{"第二行"},
{"第三行"},
{"第四行"}},
new String[]{"測試行1","測試行2"}){
/* (non-Javadoc)
* 重寫方法,判斷表單元格是否可編輯
* 可以通過row和column索引判斷某一個單元格是否可編輯
* 此處設為都不可編輯
* @see javax.swing.table.DefaultTableModel#isCellEditable(int, int)
*/
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
});
// 開始向表格中新增複選框(注意:此示例較為簡單,預設很多判斷,也沒有動態程式碼支援)
// 通過設定列渲染
// 方法一:直接方式 使用TableColumn的setCellRenderer方法(推薦)
// 此方法可以設定某一列的渲染(即使用某一個元件--即控制元件來顯示單元格資料)
table.getColumnModel().getColumn(1).setCellRenderer(
new TableCellRenderer(){
/*(non-Javadoc)
* 此方法用於向方法呼叫者返回某一單元格的渲染器(即顯示資料的組建--或控制元件)
* 可以為JCheckBox JComboBox JTextArea 等
* @see javax.swing.table.TableCellRenderer#getTableCellRendererComponent(javax.swing.JTable, java.lang.Object, boolean, boolean, int, int)
*/
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
// 建立用於返回的渲染元件
JCheckBox ck = new JCheckBox();
// 使具有焦點的行對應的複選框選中
ck.setSelected(isSelected);
// 設定單選box.setSelected(hasFocus);
// 使複選框在單元格內居中顯示
ck.setHorizontalAlignment((int) 0.5f);
return ck;
}});
// 方法二:先設定列編輯器,然後設定單元格渲染
// 設定列編輯器
// 在以複選框為物件設定列編輯器時,必須保證該列能夠被編輯,否則無法更改狀態
// (此步驟可以省略,省略時不要忘記將列設為不可編輯)
// table.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(new JCheckBox()));
// 設定單元格渲染(這裡是設定表格級別的渲染)
/*table.setDefaultRenderer(Object.class, new TableCellRenderer(){
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
// 判斷是否為需要渲染的列
if(column == 1){
// 和方法一基本一致
JCheckBox box = new JCheckBox();
box.setSelected(isSelected);
// 設定單選box.setSelected(hasFocus);
box.setHorizontalAlignment((int) CENTER_ALIGNMENT); // 0.5f
return box;
}
// 如果不是需要渲染的列,封裝文字域顯示資料
return new JTextArea(value.toString());
}});*/
// 在多選是需要按住Ctrl鍵或者滑鼠按住拖過連續的需要選中的行,應該給使用者說明
// 第一種方法是被推薦的,因為它具有選中的高亮顯示,介面能更加友好
table.setSize(panel.getWidth(),panel.getHeight() - 90);
table.setLocation(0, 0);
btn = new JButton("Test");
btn.setSize(80,40);
btn.setLocation((panel.getWidth()) / 2 - 40, panel.getHeight() - 80);
// 按鈕點選時顯示當前選中項
btn.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
for(int rowindex : table.getSelectedRows()){
JOptionPane.showMessageDialog(null, rowindex + " " + table.getValueAt(rowindex, 0));
}
}});
panel.add(table);
panel.add(btn);
this.add(panel);
}
// 定義一些必要的元件
private JPanel panel;
private JTable table;
private JButton btn;
}
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.table.*;
public class MyFirstJFrame extends JFrame {
// 作為測試的main方法
public static void main(String[] args) {
new MyFirstJFrame().setVisible(true);
}
/**
* 構造方法
*/
public MyFirstJFrame() {
InitialComponent();
}
/**
* 初始化元件的方法
*/
private void InitialComponent(){
// 設定窗體引數
// 設定佈局模式
setLayout(null);
// 設定窗體大小
setSize(480, 360);
// 設定窗體居中(非常規方法)
setLocationRelativeTo(null);
// 關閉窗體退出程式
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
// 初始化面板
panel = new JPanel();
panel.setSize(this.getWidth(), this.getHeight());
panel.setLocation(0,0);
panel.setLayout(null);
// 初始化表格
table = new JTable(
new DefaultTableModel(
new Object[][]{
{"第一行"},
{"第二行"},
{"第三行"},
{"第四行"}},
new String[]{"測試行1","測試行2"}){
/* (non-Javadoc)
* 重寫方法,判斷表單元格是否可編輯
* 可以通過row和column索引判斷某一個單元格是否可編輯
* 此處設為都不可編輯
* @see javax.swing.table.DefaultTableModel#isCellEditable(int, int)
*/
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
});
// 開始向表格中新增複選框(注意:此示例較為簡單,預設很多判斷,也沒有動態程式碼支援)
// 通過設定列渲染
// 方法一:直接方式 使用TableColumn的setCellRenderer方法(推薦)
// 此方法可以設定某一列的渲染(即使用某一個元件--即控制元件來顯示單元格資料)
table.getColumnModel().getColumn(1).setCellRenderer(
new TableCellRenderer(){
/*(non-Javadoc)
* 此方法用於向方法呼叫者返回某一單元格的渲染器(即顯示資料的組建--或控制元件)
* 可以為JCheckBox JComboBox JTextArea 等
* @see javax.swing.table.TableCellRenderer#getTableCellRendererComponent(javax.swing.JTable, java.lang.Object, boolean, boolean, int, int)
*/
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
// 建立用於返回的渲染元件
JCheckBox ck = new JCheckBox();
// 使具有焦點的行對應的複選框選中
ck.setSelected(isSelected);
// 設定單選box.setSelected(hasFocus);
// 使複選框在單元格內居中顯示
ck.setHorizontalAlignment((int) 0.5f);
return ck;
}});
// 方法二:先設定列編輯器,然後設定單元格渲染
// 設定列編輯器
// 在以複選框為物件設定列編輯器時,必須保證該列能夠被編輯,否則無法更改狀態
// (此步驟可以省略,省略時不要忘記將列設為不可編輯)
// table.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(new JCheckBox()));
// 設定單元格渲染(這裡是設定表格級別的渲染)
/*table.setDefaultRenderer(Object.class, new TableCellRenderer(){
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
// 判斷是否為需要渲染的列
if(column == 1){
// 和方法一基本一致
JCheckBox box = new JCheckBox();
box.setSelected(isSelected);
// 設定單選box.setSelected(hasFocus);
box.setHorizontalAlignment((int) CENTER_ALIGNMENT); // 0.5f
return box;
}
// 如果不是需要渲染的列,封裝文字域顯示資料
return new JTextArea(value.toString());
}});*/
// 在多選是需要按住Ctrl鍵或者滑鼠按住拖過連續的需要選中的行,應該給使用者說明
// 第一種方法是被推薦的,因為它具有選中的高亮顯示,介面能更加友好
table.setSize(panel.getWidth(),panel.getHeight() - 90);
table.setLocation(0, 0);
btn = new JButton("Test");
btn.setSize(80,40);
btn.setLocation((panel.getWidth()) / 2 - 40, panel.getHeight() - 80);
// 按鈕點選時顯示當前選中項
btn.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
for(int rowindex : table.getSelectedRows()){
JOptionPane.showMessageDialog(null, rowindex + " " + table.getValueAt(rowindex, 0));
}
}});
panel.add(table);
panel.add(btn);
this.add(panel);
}
// 定義一些必要的元件
private JPanel panel;
private JTable table;
private JButton btn;
}