Pomestit' knopku v JTable mozhno tak: | Код | import javax.swing.*; import javax.swing.table.*; import java.awt.*; import java.awt.event.*;
class JTableButtonRenderer implements TableCellRenderer { private TableCellRenderer defaultRenderer;
public JTableButtonRenderer(TableCellRenderer renderer) { defaultRenderer = renderer; }
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if(value instanceof Component) return (Component)value; return defaultRenderer.getTableCellRendererComponent( table, value, isSelected, hasFocus, row, column); } }
class JTableButtonModel extends AbstractTableModel { private Object[][] rows = new Object[4][2]; JTableButtonModel() { MyButton b1 = new MyButton("Change font"); MyButton b2 = new MyButton("Change size"); MyButton b3 = new MyButton("Change spacing"); MyButton b4 = new MyButton("Change margin"); rows[0][0] = "Font"; rows[0][1] = b1; rows[1][0] = "Size"; rows[1][1] = b2; rows[2][0] = "Spacing"; rows[2][1] = b3; rows[3][0] = "Margin"; rows[3][1] = b4; EventButHandler eventHandler = new EventButHandler(); eventHandler.register(b1, b2, b3, b4); b1.addActionListener(eventHandler); // etc ... }
private String[] columns = { "Numbers", "Buttons" };
public String getColumnName(int column) { return columns[column]; }
public int getRowCount() { return rows.length; }
public int getColumnCount() { return columns.length; }
public Object getValueAt(int row, int column) { return rows[row][column]; }
public boolean isCellEditable(int row, int column) { return false; }
public Class getColumnClass(int column) { return getValueAt(0, column).getClass(); } } class EventButHandler implements ActionListener { MyButton b1, b2, b3, b4; void register (MyButton b1, MyButton b2, MyButton b3, MyButton b4) { this.b1= b1; this.b2 = b2; this.b3 = b3; this.b4 = b4; } public void actionPerformed(ActionEvent ae) { if (ae.getSource().equals(b1)) { System.out.println("Button pressed"); } }
} class MyButton extends JButton { MyButton(String name) { super(name); } void fireEvent(ActionEvent ae) { fireActionPerformed(ae); } } class JTableButtonMouseListener implements MouseListener { private JTable table;
private void forwardEventToButton(MouseEvent e) { TableColumnModel columnModel = table.getColumnModel(); int column = columnModel.getColumnIndexAtX(e.getX()); int row = e.getY() / table.getRowHeight(); Object value; MyButton button; MouseEvent buttonEvent;
if(row >= table.getRowCount() || row < 0 || column >= table.getColumnCount() || column < 0) return;
value = table.getValueAt(row, column);
if(!(value instanceof MyButton)) return; button = (MyButton)value; button.fireEvent(new ActionEvent(button, ActionEvent.ACTION_PERFORMED, "")); }
public JTableButtonMouseListener(JTable table) { this.table = table; }
public void mouseClicked(MouseEvent e) { //forwardEventToButton(e); }
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
public void mousePressed(MouseEvent e) { forwardEventToButton(e); }
public void mouseReleased(MouseEvent e) { } }
public final class JTableButton extends JFrame { private JTable table; private JScrollPane scrollPane;
public JTableButton() { super("JTableButton Demo"); TableCellRenderer defaultRenderer;
table = new JTable(new JTableButtonModel()); defaultRenderer = table.getDefaultRenderer(JButton.class); table.setDefaultRenderer(JButton.class, new JTableButtonRenderer(defaultRenderer)); table.setPreferredScrollableViewportSize(new Dimension(400, 200)); table.addMouseListener(new JTableButtonMouseListener(table));
scrollPane = new JScrollPane(table); setContentPane(scrollPane); }
public static void main(String[] args) { Frame frame; WindowListener exitListener;
exitListener = new WindowAdapter() { public void windowClosing(WindowEvent e) { Window window = e.getWindow(); window.setVisible(false); window.dispose(); System.exit(0); } };
frame = new JTableButton(); frame.addWindowListener(exitListener); frame.pack(); frame.setVisible(true); } }
|
Nu a kak sovmestit' ee e JLabel - nuzhno podumat'.
|