java - java - 如何在java netbeans的表格单元格中添加一个按钮?(我正在使用拖放方法。)
问题描述
我正在尝试在表格单元格中添加一个按钮。我正在使用 netbeans 的拖放方法,因为我对编码一无所知,如果你能教我编码,我将不胜感激。谢谢!
解决方案
如果您在 netbean 中使用拖放操作来实现 swing,我强烈建议您接触 swings 的基础,亲自动手,这样您就会知道发生了什么以及代码是如何工作的。
让我介绍一下如何实现这一目标。它将由 3 个类组成,以便您更好地了解正在发生的事情,并且它也练习 oop,但是您可以将其修改为您喜欢的设计模式。
_main.java
public class _main extends JFrame{
private static final long serialVersionUID = 1L;
// Create new JFrame
_main(){
new JFrame("Main");
setLayout(new BorderLayout());
setSize(500,300);
add(new JLabel("Table Example ", SwingUtilities.CENTER) , BorderLayout.PAGE_START);
// ---------------- Call the method you have created in tableView.java ------------
add(new JScrollPane(new tableView(this).sampleTable()), BorderLayout.CENTER);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args){
//Run Program
new _main();
}
}
表视图.java
public class tableView {
JFrame frame = new JFrame();
public tableView(JFrame frame) {
this.frame = frame;
}
//Create columnTitle & Table Model
String[] columnTitle = { "Data 1", "Data 2", "Data 3", "Buttons " };
DefaultTableModel model = new DefaultTableModel(columnTitle, 0);
public JTable sampleTable(){
JTable _dataTable = new JTable(model) {
@Override
public void updateUI() {
super.updateUI();
setRowHeight(34);
setAutoCreateRowSorter(true);
//------------ Placing button at your desired column ------------
TableColumn column;
column = getColumnModel().getColumn(3);
column.setCellRenderer(new tableModel(frame).new viewRenderer());
column.setCellEditor(new tableModel(frame).new ButtonsEditorView(this));
}
};
DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();
centerRenderer.setHorizontalAlignment(JLabel.CENTER);
//-------- Adding data to your table row , use for loop for multiple data ---------
model.addRow(new Object[]{"1","2","3"});
return _dataTable;
}
}
表模型.java
public class tableModel extends tableView{
public tableModel(JFrame frame) {
super(frame);
}
class viewButton extends JPanel {
public JButton viewbtnp = new JButton("View");
protected viewButton() {
setOpaque(true);
setFocusable(false);
add(viewbtnp);
}
}
class viewRenderer implements TableCellRenderer {
private final viewButton panel = new viewButton() {
@Override
public void updateUI() {
super.updateUI();
setName("Table.cellRenderer");
}
};
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
panel.setBackground(isSelected ? table.getSelectionBackground() : table.getBackground());
return panel;
}
}
class ViewAction extends AbstractAction {
private final JTable table;
protected ViewAction(JTable table) {
super("view");
this.table = table;
}
@Override
public void actionPerformed(ActionEvent e) {
//--------------------------- Create your own function on what you want the button to do when button is clicked -------------
System.out.println("Clicked ");
}
}
class ButtonsEditorView extends AbstractCellEditor implements TableCellEditor {
protected final viewButton panel = new viewButton();
protected final JTable table;
protected ButtonsEditorView(JTable table) {
super();
this.table = table;
panel.viewbtnp.setAction(new ViewAction(table));
}
@Override
public Component getTableCellEditorComponent(JTable tbl, Object value, boolean isSelected, int row,
int column) {
panel.setBackground(tbl.getSelectionBackground());
return panel;
}
@Override
public Object getCellEditorValue() {
return "";
}
}
}
输出
希望能帮助到你。干杯
推荐阅读
- react-native - React Native Circular Progress on Long Press
- c++ - 如何解决调用 size() 时 Visual Studios 无法识别数组的类类型的问题?
- swiftui - 在 SwiftUI 中重新创建蒙版模糊效果
- r - 在 corrplot 的下三角形上为 P 值添加颜色
- flash - 我们可以在 2021 年 1 月 12 日之后播放 Flash 客户端的虚拟机/容器吗?
- javascript - 在 JS 对象中查找重复或虚假值 - Javascript
- java - 必须验证页面上存在的图像
- c - 什么是 AV_SAMPLE_FMT_FLT
- sql - SQL 表名作为要查询的变量
- css - 我可以根据是否有任何东西以网格区域为目标来设置 CSS 网格行高吗?