1

大丈夫!したがって、私の問題は、プログラムの実行時にコンテナー (続き) が表示されないことです。コンテナー内にあるすべてのものを pangui2 に直接追加しようとしましたが、それは機能せず、実行して JTextArea のみを表示するという同じ結果が得られました。助けてくれてありがとう。

package guiprojj;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Map;

import javax.swing.*;

import com.eclipsesource.json.JsonObject;
import com.google.gson.JsonParser;
import com.json.parsers.JSONParser;
import com.json.parsers.JsonParserFactory;


public class gui {
    public static void main(String[] args)
    {
        JFrame maingui = new JFrame("Gui");
        JButton enter = new JButton("Enter");
        final JTextArea movieinfo = new JTextArea(5,20);
        final JTextField movietext = new JTextField(16);
        final JScrollPane scrolll = new JScrollPane(movieinfo);
        final JLabel titlee = new JLabel("Enter movie name here:");
        final Container cont = new Container();
        JPanel pangui = new JPanel();
        JPanel pangui2 = new JPanel();
        maingui.add(pangui2);
        maingui.add(pangui);
        maingui.setResizable(false);
        maingui.setVisible(true);
        pangui.add(scrolll);
        pangui2.add(cont);
        cont.add(titlee);
        cont.add(movietext);
        cont.add(enter);
        movieinfo.setLineWrap(true);
        movieinfo.setWrapStyleWord(true);
        movieinfo.setEditable(false);
        scrolll.getPreferredSize();
        maingui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        maingui.pack();
        enter.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e)  
            {
                System.out.println(Test.getMovieInfo(movietext.getText()));
                 JsonParserFactory factory=JsonParserFactory.getInstance();
                 JSONParser parser=factory.newJsonParser();
                 Map jsonData=parser.parseJson(Test.getMovieInfo(movietext.getText()));
                 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);
            }
            });

        }
}

あなたのソリューションを試した後、TextArea だけでなく、何も得られません。

package guiprojj;

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Map;

import javax.swing.*;

import com.eclipsesource.json.JsonObject;
import com.google.gson.JsonParser;
import com.json.parsers.JSONParser;
import com.json.parsers.JsonParserFactory;


public class gui {
    final static String SCROLL = "Card with JButtons";
    final static String BOX = "Card with JTextField";
    public static void main(String[] args)
    {
        JFrame maingui = new JFrame("Gui");
        JButton enter = new JButton("Enter");
        final JTextArea movieinfo = new JTextArea(5,20);
        final JTextField movietext = new JTextField(16);
        final JScrollPane scrolll = new JScrollPane(movieinfo);
        final JLabel titlee = new JLabel("Enter movie name here:");
        final Container cont = new Container();
        JPanel cards = new JPanel(new CardLayout());
        JPanel pangui = new JPanel();
        JPanel pangui2 = new JPanel();
        maingui.add(cards);
        cards.add(pangui2, SCROLL);
        cards.add(pangui2, BOX);
        maingui.setResizable(false);
        maingui.setVisible(true);
        pangui.add(scrolll);
        pangui2.add(cont);
        cont.add(titlee);
        cont.add(movietext);
        cont.add(enter);
        movieinfo.setLineWrap(true);
        movieinfo.setWrapStyleWord(true);
        movieinfo.setEditable(false);
        scrolll.getPreferredSize();
        maingui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        maingui.pack();
        enter.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e)  
            {
                System.out.println(Test.getMovieInfo(movietext.getText()));
                 JsonParserFactory factory=JsonParserFactory.getInstance();
                 JSONParser parser=factory.newJsonParser();
                 Map jsonData=parser.parseJson(Test.getMovieInfo(movietext.getText()));
                 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);
            }
            });

        }
}
4

1 に答える 1

3

JFrame はデフォルトで BorderLayout を使用し、BorderLayout を使用するコンテナにデフォルトの方法で追加されたコンポーネントは、BorderLayout.CENTER の位置に移動します。これは、JFrame に 2 番目に追加したコンポーネントが、最初に追加したコンポーネントをカバーすることを意味します。

maingui.add(pangui2);
maingui.add(pangui); // this will cover pangui2

JFrame の contentPane にGridLayout などの別のレイアウトを与えることを検討してください。

  • 余談ですが、なぜここで Swing JPanel ではなく AWT コンテナーを使用するのでしょうか。
  • 余談 #2: この行が何を達成しようとしているのかわからない:scrolll.getPreferredSize();
  • 余談 #3: 現在の問題を示すためだけに static main メソッドを使用していますか? それとも、現在の「本番」コードの上のコードですか? 後者の場合、そのコードのほとんどをメイン メソッドから取り出して、コンストラクターとインスタンス メソッドに入れる必要があります。main メソッドは、プログラムのセットアップと開始のみに関係する必要があり、それだけです。

あなたの状態を編集
:

何も交換したくありません。文字通り、テキスト領域の上にある textField の上にラベルを付けたいだけです。

次に、CardLayoutは、スワッピングとスワッピングのみに使用するものではありません(tutが教えてくれるように)。JTextField の上にある JLabel の場合、JLabel がBorderLayout.NORTH位置にあり、JTextField が位置にある BorderLayout で JPanel を使用することを検討してBorderLayout.CENTERください。次に、BorderLayout を使用して別の JPanel を作成し、上の JPanel を新しい JPanel のBorderLayout.NORTH位置に配置し、その位置に JTextArea を保持する JScrollPane を配置しBorderLayout.CENTERます。

しかし、最も重要なことは、チュートリアルを読んで、レイアウトの使い方を教えてくれることです。推測はこれではうまくいきません。

于 2013-09-17T21:11:36.240 に答える