簡體   English   中英

按下其他JButton后未調用JButton

[英]JButton isn't being called after pressing other JButton

如果在JTextBox中輸入字符串,則比按“輸入按鈕”要大,它會在JTextField中返回正確的數據,如果我更改了字符串,並按Enter也將返回正確的數據。 如果我嘗試按“輸入按鈕”,而不是按“添加”按鈕(將數據添加到JList,並重新調用Gui方法以更新JList),如果我嘗試在JTextField中輸入另一個字符串,當我按Enter鍵時什么也沒有發生。 我不明白為什么會這樣,如果有人看到我沒看到的東西,如果您能告訴我,那將很酷。

package movieinfo;

import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.List;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Map;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

import org.apache.commons.io.FileUtils;

import com.json.parsers.JSONParser;
import com.json.parsers.JsonParserFactory;

public class Swinggui {
    private static JButton enter;
    private static JTextField movietext;
    private static JTextArea movieinfo;
    private static JList listofmovies;// converts moviestowatch into gui
                                        // element.
    private static File textfilemovie; // file which movies marked for watching
                                        // are saved
    private static java.util.List<String> moviestowatch; // arraylist which is
                                                            // populated by
                                                            // textfilemovie
                                                            // than printed to
                                                            // GUI element
    private static JsonParserFactory factory;
    private static JSONParser parser;
    @SuppressWarnings("rawtypes")
    private static Map jsonData;
    private static ListSelectionListener setSearch;
    private static JButton add;

    public static void main(String[] args) throws IOException {
        yourMovies();
        gui();
        jsonAndButtons();

    }

    public static void gui() {
        JFrame maingui = new JFrame("Gui");
        maingui.setLayout(new GridBagLayout());
        GridBagConstraints c = new GridBagConstraints();
        c.fill = GridBagConstraints.VERTICAL;
        enter = new JButton("Get Info");
        c.gridx = 2;
        c.gridy = 1;
        maingui.add(enter, c);
        add = new JButton("add");
        c.gridx = 5;
        c.gridy = 6;
        maingui.add(add, c);
        movieinfo = new JTextArea(5, 20);
        movieinfo.setBorder(BorderFactory.createMatteBorder(2, 2, 2, 2,
                Color.red));
        movietext = new JTextField(18);
        c.gridx = 1;
        c.gridy = 1;
        maingui.add(movietext, c);
        final JScrollPane scrolll = new JScrollPane(movieinfo);
        c.gridx = 1;
        c.gridy = 3;
        c.gridwidth = 2;
        maingui.add(scrolll, c);
        final JLabel titlee = new JLabel("Enter movie name below!");
        c.gridx = 1;
        c.gridy = 0;
        maingui.add(titlee, c);
        final JLabel info = new JLabel("Info");
        c.gridx = 1;
        c.gridy = 3;
        maingui.add(titlee, c);
        final JLabel watchlist = new JLabel("Watchlist");
        c.gridx = 5;
        c.gridy = 1;
        maingui.add(watchlist, c);
        maingui.setResizable(false);
        maingui.setVisible(true);
        listofmovies = new JList(moviestowatch.toArray());
        c.gridx = 4;
        c.gridy = 3;
        maingui.add(new JScrollPane(listofmovies), c);
        movieinfo.setLineWrap(true);
        movieinfo.setWrapStyleWord(true);
        movieinfo.setEditable(false);
        scrolll.getPreferredSize();
        listofmovies.addListSelectionListener(setSearch);
        maingui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        maingui.pack();

    }

    public static void jsonAndButtons() {
        enter.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                System.out.println(apicall.getMovieInfo(movietext.getText().replaceAll(" ", "%20")));
                factory = JsonParserFactory.getInstance();
                parser = factory.newJsonParser();
                jsonData = parser.parseJson(apicall.getMovieInfo(movietext
                        .getText().replaceAll(" ", "%20")));
                String Title = (String) jsonData.get("Title");
                String Year = (String) jsonData.get("Year");
                String Plot = (String) jsonData.get("Plot");
                movieinfo.setText("Title: " + Title + "\nYear: " + Year
                        + "\nPlot: " + Plot);

            }

        });
        add.addActionListener(new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent arg0) {
                try {
                    FileUtils.writeStringToFile( new File(
                            org.apache.commons.io.FileUtils.getUserDirectory()
                            + "/yourmovies.txt"), "\n" + movietext.getText(), true);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }  
                try {
                    moviestowatch = FileUtils.readLines(textfilemovie);
                    jsonAndButtons();
                    gui();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }

        }); 

    }

    public static void yourMovies() throws IOException {
        textfilemovie = new File(
                org.apache.commons.io.FileUtils.getUserDirectory()
                        + "/yourmovies.txt");
        textfilemovie.createNewFile();
        moviestowatch = FileUtils.readLines(textfilemovie);
        setSearch = new ListSelectionListener() {

            public void valueChanged(ListSelectionEvent arg0) {
                factory = JsonParserFactory.getInstance();
                parser = factory.newJsonParser();
                jsonData = parser.parseJson(apicall.getMovieInfo(((String) listofmovies
                        .getSelectedValue()).replaceAll(" ", "%20")));
                String Title = (String) jsonData.get("Title");
                String Year = (String) jsonData.get("Year");
                String Plot = (String) jsonData.get("Plot");
                movieinfo.setText("Title: " + Title + "\nYear: " + Year
                        + "\nPlot: " + Plot);
            }
        };
    }
}

在“添加”按鈕的actionListener中,您再次調用jsonAndButtons()和gui()方法,它們將重新創建按鈕。 那可能導致奇怪的行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM