JTABLE 一个小格子添加2个按钮实现国际化 使用观察者设计模式

来源:互联网 发布:数据帧 格式 14字节 编辑:程序博客网 时间:2024/04/30 08:51
package org.primary.c15UI.class08;

import javax.swing.AbstractCellEditor;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

import java.awt.Component;

import javax.swing.JTable;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Locale;
import java.util.Observable;
import java.util.Observer;
import java.util.ResourceBundle;

import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;

public class ButtonTable {
    public static JFrame jFrame;
    private JTable table;
    private JButton btnNewButton;
    private boolean flag=true;
    
    public ButtonTable(){
        jFrame=new JFrame();
        jFrame.setSize(600, 400);
        jFrame.setDefaultCloseOperation(jFrame.DISPOSE_ON_CLOSE);
        jFrame.setLocationRelativeTo(null);
        
        table = new JTable();
        table.setModel(new DefaultTableModel(
            new Object[][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
            },
            new String[] {
                "New column", "New column", "New column", "操作"
            }
        ));
        SimpleButton sButton=new SimpleButton();
        TableColumn  tc=table.getColumnModel().getColumn(3);
        tc.setPreferredWidth(200);
        tc.setCellEditor(sButton);
        tc.setCellRenderer(sButton);
        table.setRowHeight(50);
        JScrollPane js=new JScrollPane(table);
        jFrame.getContentPane().add(js);
        
        btnNewButton = new JButton("New button");
        btnNewButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                
                Locale locale=null;
                if(flag){
                     locale=new Locale("en","US");
                     flag=false;
                }else {
                    locale=new Locale("zh","CN");
                    flag=true;
                }
                
                MyNative.getMyNative().setLocale(locale);
                jFrame.setVisible(false);
                jFrame.setVisible(true);
            }
        });
        js.setRowHeaderView(btnNewButton);
        
        
    }
    public static void main(String[] args) {
        ButtonTable zh=new ButtonTable();
        zh.jFrame.setVisible(true);
    }

}

class SimpleButton extends AbstractCellEditor implements TableCellEditor,TableCellRenderer
{
    private JPanel jPanel=new JPanel();
    private JButton b1=new HButton("name", MyNative.getMyNative());
    private JButton b2=new HButton("name1", MyNative.getMyNative());
    private MyNative mn=MyNative.getMyNative();
    public SimpleButton(){
        
        /*b1.setText(mn.getValue("name"));
        b2.setText(mn.getValue("name1"));*/
        b1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("*************");
            }
        });
        b2.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("+++++++++++");
                
            }
        });
        jPanel.add(b1);
        jPanel.add(b2);
    }
    @Override
    public Object getCellEditorValue() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int column) {
        return jPanel;
    }
    @Override
    public Component getTableCellEditorComponent(JTable table, Object value,
            boolean isSelected, int row, int column) {
        return jPanel;
    }
}

class HButton extends JButton implements Observer{

    private String name;
    private MyNative mn=MyNative.getMyNative();
    public HButton(String name,Observable observable) {
        this.name=name;
        setText(mn.getValue(name));
        observable.addObserver(this);
    }
    @Override
    public void update(Observable o, Object arg) {
        this.setText(mn.getValue(name));
        System.out.println(mn.getValue(name));
    }
    
}

class MyNative extends Observable{

    private Locale locale= Locale.getDefault();

    private static MyNative myNative=new MyNative();
    private  MyNative(){}
    public static MyNative getMyNative(){
        return myNative;
    }
    public  String getValue(String value) {
        /**
         * base_en_US .properties
         * base_zh_CN.properties
         */
        ResourceBundle rb= ResourceBundle.getBundle("base", locale);
        return rb.getString(value);
    }
    
    public void setLocale(Locale locale) {
        this.locale = locale;
        this.setChanged();
        this.notifyObservers();
    }

}

0 0
原创粉丝点击