栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Swing中实现动态GUI

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Swing中实现动态GUI

仅作为示例,所有内容都经过硬编码,以更好地理解

编辑:

正如kleopatra所注意到的那样,将JTable#fireTableDataChanged()从ActionListener移到了TableModel,修改了所有ClassName以lowerCase开头

`import java.awt.;
import java.awt.event.
;
import java.util.EventObject;
import javax.swing.;
import javax.swing.table.
;

public class ComponentTableTest {

private Jframe frame;private JTable CompTable = null;private CompTableModel CompModel = null;private JButton addButton = null;public static void main(String args[]) {    SwingUtilities.invokeLater(new Runnable() {        @Override        public void run() { new ComponentTableTest().makeUI();        }    });}public void makeUI() {    CompTable = CreateCompTable();    JScrollPane CompTableScrollpane = new JScrollPane(CompTable, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);    JPanel bottomPanel = CreateBottomPanel();    frame = new Jframe("Comp Table Test");    frame.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);    frame.add(CompTableScrollpane, BorderLayout.CENTER);    frame.add(bottomPanel, BorderLayout.SOUTH);    frame.setPreferredSize(new Dimension(800, 400));    frame.setLocation(150, 150);    frame.pack();    frame.setVisible(true);}public JTable CreateCompTable() {    CompModel = new CompTableModel();    CompModel.addRow();    JTable table = new JTable(CompModel);    table.setRowHeight(new CompCellPanel().getPreferredSize().height);    table.setTableHeader(null);    CompCellEditorRenderer compCellEditorRenderer = new CompCellEditorRenderer();    table.setDefaultRenderer(Object.class, compCellEditorRenderer);    table.setDefaultEditor(Object.class, compCellEditorRenderer);    return table;}public JPanel CreateBottomPanel() {    addButton = new JButton("Add Comp");    addButton.addActionListener(new ActionListener() {        @Override        public void actionPerformed(ActionEvent ae) { Object source = ae.getSource(); if (source == addButton) {     CompModel.addRow();     //CompModel.fireTableDataChanged(); // moved to TableModel }        }    });    JPanel panel = new JPanel(new GridBagLayout());    panel.add(addButton);    return panel;}

}

class CompCellEditorRenderer extends AbstractCellEditor implements TableCellRenderer, TableCellEditor {

private static final long serialVersionUID = 1L;private CompCellPanel renderer = new CompCellPanel();private CompCellPanel editor = new CompCellPanel();@Overridepublic Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {    renderer.setComp((Comp) value);    return renderer;}@Overridepublic Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {    editor.setComp((Comp) value);    return editor;}@Overridepublic Object getCellEditorValue() {    return editor.getComp();}@Overridepublic boolean isCellEditable(EventObject anEvent) {    return true;}@Overridepublic boolean shouldSelectCell(EventObject anEvent) {    return false;}

}

class CompTableModel extends DefaultTableModel {

private static final long serialVersionUID = 1L;@Overridepublic int getColumnCount() {    return 1;}public void addRow() {    super.addRow(new Object[]{new Comp(0, 0, "", "")});    //super.fireTableDataChanged();}

}

class Comp {

int type;int relation;String lower;String upper;public Comp(int type, int relation, String lower, String upper) {    this.type = type;    this.relation = relation;    this.lower = lower;    this.upper = upper;}

}

class CompCellPanel extends JPanel {

private static final long serialVersionUID = 1L;private JLabel labelWith = new JLabel("With ");private JComboBox typeCombo = new JComboBox(new Object[]{"height", "length", "volume"});private JComboBox relationCombo = new JComboBox(new Object[]{"above", "below", "between"});private JTextField lowerField = new JTextField();private JLabel labelAnd = new JLabel(" and ");private JTextField upperField = new JTextField();private JButton removeButton = new JButton("remove");CompCellPanel() {    setLayout(new BoxLayout(this, BoxLayout.X_AXIS));    relationCombo.addActionListener(new ActionListener() {        @Override        public void actionPerformed(ActionEvent e) { enableUpper(relationCombo.getSelectedIndex() == 2);        }    });    enableUpper(false);    removeButton.addActionListener(new ActionListener() {        @Override        public void actionPerformed(ActionEvent e) { JTable table = (JTable) SwingUtilities.getAncestorOfClass(JTable.class, (Component) e.getSource()); int row = table.getEditingRow(); table.getCellEditor().stopCellEditing(); ((DefaultTableModel) table.getModel()).removeRow(row);        }    });    add(labelWith);    add(typeCombo);    add(relationCombo);    add(lowerField);    add(labelAnd);    add(upperField);    add(Box.createHorizontalStrut(100));    add(removeButton);}private void enableUpper(boolean enable) {    labelAnd.setEnabled(enable);    upperField.setEnabled(enable);}public void setComp(Comp Comp) {    typeCombo.setSelectedIndex(Comp.type);    relationCombo.setSelectedIndex(Comp.relation);    lowerField.setText(Comp.lower);    upperField.setText(Comp.upper);    enableUpper(Comp.relation == 2);}public Comp getComp() {    return new Comp(typeCombo.getSelectedIndex(), relationCombo.getSelectedIndex(), lowerField.getText(), upperField.getText());}

}`



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/414933.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号