【问题标题】:Interaction between 2 tables in 2 frames2 帧中 2 个表格之间的交互
【发布时间】:2018-06-29 04:31:02
【问题描述】:

哪种框架/窗格是满足以下目标的最佳做法?

  • 主机有jtable1
  • jtable1 上按ENTER 将调用子框架
  • 子框架有jtable2 2行数据
  • jtable1jtable2 具有完全相同的列名

jtable2的第2行按ENTER,会发生以下情况:

  • jtable1 的当前行的值 = jtable2 的第 2 行的值
  • jtable1 将创建新行
  • 配置子框架

【问题讨论】:

  • 1) 见The Use of Multiple JFrames, Good/Bad Practice? 2) “如果可以,请提供示例代码” 所以不是编码服务。 3) 从第一点开始:jtable2 应该出现在(模态)JDialogJOptionPane 中。
  • 为什么有两张桌子?为什么不只拥有一个并交换模型?
  • ".. 应该可能出现在(模态)JDialog" .. 或 @MadProgrammer 建议的内容(在一个表中更改模型),这听起来更好。
  • @MadProgrammer,jtable1 是主表,当需要查找所需的项目时(例如,从 master 中选择 productname where productid like '%pencil%'),用户需要在 frame2 n put 中找到它jtable2上需要的项目,然后用户可以从jtable2中选择需要的项目,然后将其值传递给jtable1,jtable2被处理并返回给jtable1。
  • @andrew,实际上在 frame2 中有一个文本字段作为输入(铅笔作为输入)用于(从 master 中选择 productname where productid= like '%pencil%')。将有 b 几个结果放在 jtable2 中。然后用户将从 jtable2 中选择需要哪支铅笔 n 通过按 ENTER b4 处理 frame2 将其值传输到 jtable1。然后回到frame1中的jtable1 n继续其他产品。我会按照你的建议尝试使用 jdialog / joptionpane,希望它会起作用。

标签: java swing jframe jtable


【解决方案1】:

这是一个可以回答上述问题的示例:

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.KeyStroke;
import javax.swing.table.DefaultTableModel;

public class Dialog3 {

    public static void main(String[] args) {     
        //f1=JFrame 1, f1cp=ContentPane in f1, f1table=JTable in f1, f1sp=ScrollPane in f1
        JFrame f1=new JFrame("Frame");
        f1.setBounds(0, 0, 300, 400);
        f1.getContentPane().setLayout(new BorderLayout());
        f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f1.setLocationRelativeTo(null);

        JPanel f1cp=new JPanel();
        f1.getContentPane().add(f1cp, BorderLayout.CENTER);

        String[] columnNames = {"CODE", "NAME"};
            Object[][] data = {{"code 8","name 8"}, {null,null}};
            DefaultTableModel f1model = new DefaultTableModel(data, columnNames);
            JTable f1table=new JTable(f1model);
        JScrollPane f1sp=new JScrollPane(f1table);
        f1cp.add(f1sp);

        f1.pack();
        f1.setVisible(true);        

        f1table.getInputMap().put(KeyStroke.getKeyStroke("pressed ENTER"), "f1enter");
        f1table.getActionMap().put("f1enter", new AbstractAction(){
            @Override
            public void actionPerformed(ActionEvent e){showd1(f1,f1table, f1model);}
        }); 

    } //end of main(string[])

    private static void showd1(JFrame f1, JTable f1table, DefaultTableModel f1model){
        //d1=JDialog1, d1cp=ContentPane in d1, d1table=JTable in d1, d1sp=ScrollPane in d1
        JDialog d1=new JDialog(f1, "Dialog", true);
        d1.setBounds(0, 0, 300, 400);
        d1.setLocationRelativeTo(f1);

        JPanel d1cp=new JPanel();
        d1.getContentPane().add(d1cp, BorderLayout.CENTER);

        String[] columnNames = {"CODE", "NAME"};
            Object[][] data = {{"code 1","name 1"}, {"code 2","name 2"}};
            DefaultTableModel model = new DefaultTableModel(data, columnNames);
            JTable d1table=new JTable(model);
        JScrollPane d1sp=new JScrollPane(d1table);
        d1cp.add(d1sp);

        d1table.getInputMap().put(KeyStroke.getKeyStroke("pressed ENTER"), "d1tf");
        d1table.getActionMap().put("d1tf", new AbstractAction(){
            @Override
            public void actionPerformed(ActionEvent e){
                f1table.setValueAt(d1table.getValueAt(d1table.getSelectedRow(), 0),f1table.getSelectedRow(), 0);
                f1table.setValueAt(d1table.getValueAt(d1table.getSelectedRow(), 1),f1table.getSelectedRow(), 1);
                f1model.addRow(data);   
                f1table.setValueAt(null, f1model.getRowCount()-1, 0);
                f1table.setValueAt(null, f1model.getRowCount()-1, 1);
                d1.dispose();
            }
        });

        d1.pack();
        d1.setVisible(true);        
    } //end of showd1
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    相关资源
    最近更新 更多