简体   繁体   English

如何将Text字段的值设置为等于JTable单元格

[英]How to set value of the Text filed equal to the JTable cell

I am trying to update the value of the JTextFiwld to be equal to JTable cell one of the user told me to use setText() but this is not the way java going to recognize the cell even if he did how he will get the value from the cell and update it to the JTextField because every row have 3 cells also I am using SwingWorker to read files then show the information in the JTable then the information should be showing in the text field do I have to use ActionListener or what? 我试图将JTextFiwld的值更新为等于JTable单元格,一位用户告诉我使用setText()但这不是java识别单元格的方式,即使他做了如何从值中获取值的方式也是如此。该单元格并将其更新到JTextField因为每一行都有3个单元格,我也正在使用SwingWorker读取文件,然后在JTable显示信息,然后该信息应该在文本字段中显示,我必须使用ActionListener还是什么?

public class GuiInterface extends JFrame {
    String[] columnNames = {"#", "Start", "End", "Translation column"};


    ReadFile reader;
    private final int numberOfButton = 6;
    private final JTable table;
    JToolBar toolBar;
    private final JTextField enterText,startTime,endTime;
    private final JMenu jMenu1,jMenu2,jMenu3;
    private final JMenuBar jMenuBar1;
    private final JMenuItem itemNewSrt,itemOpenVideo,itemSavefile;
    private static JFileChooser ourFileSelector,ourVideoSelector;
    File ourVideoFile,ourSrtFile;
    Border Campound,empty,Boveld,etch;
    private final JLabel startTimeingLable,endTimeingLabel;
    public static String  mediaPath="",srtPath="";
    Canvas c;
    ImageIcon[] icon;
    JButton[] Obutton;
   static final int COLUMN = 4 ; 



         public static void main(String[] args) throws IOException 
       {
           //ReadFile.readSubtitles();
        NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "C:\\Program Files\\VideoLAN\\VLC");
        Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);
          SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new GuiInterface("");

            }

        });

}



    public GuiInterface(String title){

    //reader = new ReadFile();

    setSize(1024, 720);
    setVisible(true);
    setTitle("AnimeFactor");
    setDefaultCloseOperation(GuiInterface.EXIT_ON_CLOSE);
    //video setting 
    MediaPlayerFactory mediaPlayerFactory = new MediaPlayerFactory();
    c = new Canvas();
    c.setBackground(Color.black);
    JPanel p = new JPanel();
    p.setLayout(new BorderLayout());
    p.add(c, BorderLayout.CENTER);
    add(p, BorderLayout.CENTER);
    EmbeddedMediaPlayer mediaPlayer = mediaPlayerFactory.newEmbeddedMediaPlayer();
    mediaPlayer.setVideoSurface(mediaPlayerFactory.newVideoSurface(c));
    mediaPlayer.playMedia("C:\\Users\\isslam\\Downloads\\gg.mp4");
    table = new JTable(new DefaultTableModel(columnNames, 0));
    table.setFillsViewportHeight(true);
    table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
    TableColumn columnA = table.getColumn("#");
    columnA.setMinWidth(10);
    columnA.setMaxWidth(40);
    TableColumn columnB= table.getColumn("Start");
    columnB.setMinWidth(80);
    columnB.setMaxWidth(90);
    TableColumn columnC= table.getColumn("End");
    columnC.setMinWidth(80);
    columnC.setMaxWidth(90);


    ImageIcon openIcon = new ImageIcon(
                GuiInterface.class.getResource("/resources/image/folder-icon.png"));
        ImageIcon saveIcon = new ImageIcon(
                GuiInterface.class.getResource("/resources/image/red-disk-icon.png"));
        ImageIcon newIcon = new ImageIcon(
                GuiInterface.class.getResource("/resources/image/Actionsnew-icon.png"));




        Action openAction = new AbstractAction("Open Subtitle", openIcon) {
            @Override
            public void actionPerformed(ActionEvent e) {
                ourFileSelector.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
                ourFileSelector.showSaveDialog(null);
                ourSrtFile =  ourFileSelector.getSelectedFile();
                srtPath = ourSrtFile.getAbsolutePath();
                Worker p = new Worker(srtPath, table);
                p.execute();
            }
        };

        Action saveAction = new AbstractAction("Save", saveIcon) {
            @Override
            public void actionPerformed(ActionEvent e) {

            }
        };
        Action newAction = new AbstractAction("New", newIcon) {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("New File");
            }
        };
    jMenu1 = new JMenu("File");
    jMenu2 = new JMenu("Video");
    jMenu3 = new JMenu("Subtitle");
    itemNewSrt = new JMenuItem(newAction);
    jMenu1.add(itemNewSrt);
    itemSavefile = new JMenuItem(saveAction);
    jMenu1.add(itemSavefile);
    jMenuBar1 = new JMenuBar();
    jMenuBar1.setBorder(etch);
    setJMenuBar(jMenuBar1);
    jMenuBar1.add(jMenu1);
    jMenuBar1.add(jMenu2);
    jMenuBar1.add(jMenu3);
    ourFileSelector = new JFileChooser();

    Obutton = new JButton[numberOfButton];
    etch = BorderFactory.createEtchedBorder();
    //starting and ending time
    enterText = new JTextField();
    enterText.setPreferredSize(new Dimension(0,100));
    startTime = new JTextField("0:00:00.00 ");

    startTime.setPreferredSize(new Dimension(120, 20));
    startTimeingLable = new JLabel("Starting Time");
    endTimeingLabel = new JLabel("Ending Time");
    endTime = new JTextField("0:00:00.00 ");
    endTime.setPreferredSize(new Dimension(120, 20));
    //end of start and ending time filed

        toolBar = new JToolBar();
        toolBar.setBorder(new LineBorder(Color.LIGHT_GRAY, 1));
        toolBar.add(newAction);
        toolBar.add(saveAction);


        JPanel toolBarPane = new JPanel(new BorderLayout());
        toolBarPane.add(toolBar,BorderLayout.NORTH);

        JPanel timing = new JPanel(new FlowLayout(FlowLayout.TRAILING));
        timing.add(startTimeingLable);
        timing.add(startTime);
        timing.add(endTimeingLabel);
        timing.add(endTime);


        empty = BorderFactory.createEmptyBorder(30, 5, 5, 5);
        Boveld = BorderFactory.createBevelBorder(BevelBorder.RAISED);
        Campound = BorderFactory.createCompoundBorder(empty,Boveld);


        JPanel textFiled = new JPanel(new BorderLayout());
        textFiled.add(timing);
        textFiled.add(enterText,BorderLayout.SOUTH);
        textFiled.setBorder(Campound);
        JScrollPane scrollPane = new JScrollPane(table);
        add(scrollPane, BorderLayout.SOUTH);
        add(textFiled, BorderLayout.EAST);
        add(toolBarPane,BorderLayout.PAGE_START);





       toolBar.add(openAction);
       itemOpenVideo = new JMenuItem(openAction);
       jMenu1.add(itemOpenVideo);
       //itemOpenVideo.addActionListener(new MenuBarMethod());
       JPopupMenu.setDefaultLightWeightPopupEnabled(false); 
        ToolTipManager.sharedInstance().setLightWeightPopupEnabled(false);

    }


     class Worker extends SwingWorker<DefaultTableModel, Void> {
       private final String srtPath;
       private final JTable table;
       DefaultTableModel model;
        public Worker(String srtPath, JTable table) {
                this.srtPath = srtPath;
                this.table = table;
             }


     @Override
      protected DefaultTableModel doInBackground() {
     model = new DefaultTableModel(columnNames, 0);
    ArrayList<String> ends = ReadFile.getFileEndingTime(srtPath);
    ArrayList<String> starts = ReadFile.getFileStartingTime(srtPath);
    ArrayList<String> subs = ReadFile.readSubtitles(srtPath);
    ArrayList<String> lins = ReadFile.ArraylineLengths(srtPath);
    for (int i = 0; i < ReadFile.maxLine(srtPath); i++) {
        model.addRow(new Object[] {lins.get(i), starts.get(i), ends.get(i), subs.get(i)});
    }
    return model;
}
    @Override
     protected void done() {
    table.setModel(model);
    table.setFillsViewportHeight(true);
    table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
    TableColumn columnA = table.getColumn("#");
    columnA.setMinWidth(10);
    columnA.setMaxWidth(40);
    TableColumn columnB= table.getColumn("Start");
    columnB.setMinWidth(80);
    columnB.setMaxWidth(90);
    TableColumn columnC= table.getColumn("End");
    columnC.setMinWidth(80);
    columnC.setMaxWidth(90);
}
}



public class MenuBarMethod implements ActionListener{

    @Override
    public void actionPerformed(ActionEvent a){
        Object buttonPressed=a.getSource();
       if(buttonPressed.equals(itemOpenVideo)){
        ourVideoSelector.setFileSelectionMode(JFileChooser.FILES_ONLY);
        ourVideoSelector.showSaveDialog(null);
        ourVideoFile = ourVideoSelector.getSelectedFile();
        mediaPath = ourVideoFile.getAbsolutePath();
       }
    }

}

}   

Start by adding a ListSelectionListener to the table... 首先将ListSelectionListener添加到表中...

table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
    public void valueChanged(ListSelectionEvent e) {
    }
});

This will let you know when the row selection has changed. 这将让您知道何时更改了行选择。

In the valueChanged method, you want to determine which row has been selected... valueChanged方法中,您要确定已选择了哪一行...

int row = table.getSelectedRow();

Then you will want to get the value for the specified column... 然后,您将需要获取指定列的值...

Object value = table.getValueAt(row, 0); 
// 0 represents the first column, change per your requirements...

Now, assuming that the value is simply a String you could simply use something like... 现在,假设该值只是一个String ,则可以简单地使用类似...

enterText.setText(value == null ? null : value.toString());

If the value is an Object of some other type, you need to cast it first and extract the required information 如果该value是其他类型的Object ,则需要先将其强制转换并提取所需的信息

See How to Use Tables for more details 有关更多详细信息,请参见如何使用表

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM