Как добавить кнопку подряд JTable в Swing Java

Много Методов класса не обрабатывают примитивы последовательным способом, к сожалению. Распространенный способ вокруг этого в forName состоит в том, чтобы иметь таблицу как;

private static final Map<String, Class> BUILT_IN_MAP = 
    new ConcurrentHashMap<String, Class>();

static {
    for (Class c : new Class[]{void.class, boolean.class, byte.class, char.class,  
            short.class, int.class, float.class, double.class, long.class})
        BUILT_IN_MAP.put(c.getName(), c);
}

public static Class forName(String name) throws ClassNotFoundException {
    Class c = BUILT_IN_MAP.get(name);
    if (c == null)
        // assumes you have only one class loader!
        BUILT_IN_MAP.put(name, c = Class.forName(name));
    return c;
}
26
задан kleopatra 5 October 2011 в 09:47
поделиться

3 ответа

Вы не добавляете его в строку - вы добавляете его в ячейку. В этом руководстве описано, что вам нужно.

34
ответ дан 28 November 2019 в 06:39
поделиться

Столбец кнопок таблицы дает один подход.

8
ответ дан 28 November 2019 в 06:39
поделиться

Вы можете добавить Компонент в качестве ячейки таблицы.

Прежде всего, вы должны реализовать класс, имеющий JButton в качестве родительского класса и два интерфейса, TableCellRenderer и TableCellEditor.

Причина который должен реализовывать TableCellEditor, предназначен для получения ActionEvent кнопки.

public class TableButton extends JButton implements TableCellRenderer, TableCellEditor {
  private int selectedRow;
  private int selectedColumn;
  Vector<TableButtonListener> listener;

  public TableButton(String text) {
    super(text); 
    listener = new Vector<TableButtonListener>();
    addActionListener(new ActionListener() { 
      public void actionPerformed( ActionEvent e ) { 
        for(TableButtonListener l : listener) { 
          l.tableButtonClicked(selectedRow, selectedColumn);
        }
      }
    });
  }

  public void addTableButtonListener( TableButtonListener l ) {
    listener.add(l);
  }

  public void removeTableButtonListener( TableButtonListener l ) { 
    listener.remove(l);
  }

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

  @Override
  public Component getTableCellEditorComponent(JTable table,
      Object value, boolean isSelected, int row, int col) {
    selectedRow = row;
    selectedColumn = col;
    return this;
  } 

  @Override
  public void addCellEditorListener(CellEditorListener arg0) {      
  } 

  @Override
  public void cancelCellEditing() {
  } 

  @Override
  public Object getCellEditorValue() {
    return "";
  }

  @Override
  public boolean isCellEditable(EventObject arg0) {
    return true;
  }

  @Override
  public void removeCellEditorListener(CellEditorListener arg0) {
  }

  @Override
  public boolean shouldSelectCell(EventObject arg0) {
    return true;
  }

  @Override
  public boolean stopCellEditing() {
    return true;
  }
}

Затем я добавил EventListener с именем TableButtonListener для обработки события кнопки, как показано ниже.

public interface TableButtonListener extends EventListener {
  public void tableButtonClicked( int row, int col );
}

И использовать вышеупомянутый Renderer / Editor.

TableButton buttonEditor = new TableButton("Button");
buttonEditor.addButtonListener(new TableButtonListener() {
  @Override
  public void tableButtonClicked(int row, int col) {
    // do something 
  }     
}); 

TableColumn col = new TableColumn(1, 80);
col.setCellRenderer(buttonEditor);
col.setCellEditor(buttonEditor);

cols.addColumn(colPattern);

Если вы хотите отображать разные метки кнопок для каждой строки, вы должны вставить блок кода в getTableCellRendererComponent и getTableCellEditorComponent, чтобы изменить метку кнопки.

править: Код компилируется сейчас. Исправлена ​​ошибка брекетинга в конструкторе TableButton.

20
ответ дан 28 November 2019 в 06:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: