2010-12-19 10 views
1

私はこれをまったく動作させることはできません。私はJTextField(input)を入力キーが押されたときにJTextArea(reader)に置くようにしようとしていますが、JFrameにも表示されません。どのように私はこのコードスニペットを正しく動作させることができる任意のアイデア?私はおそらく明らかに見落としているでしょう。スイングコンポーネントの問題

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 


public class Gui extends JPanel implements ActionListener{ 

    public static JTextField input; 
    public JTextArea reader; 


    public Gui() { 

     //layout to be repeatedly used 
     SpringLayout s_layout = new SpringLayout(); 

     //masterpanel, everything's on it 
     JPanel all = new JPanel(); 
     all.setPreferredSize(new Dimension(600,400)); 
     all.setLayout(s_layout); 

     //left jpanel - holds reader and input areas 
     JPanel mainleft = new JPanel(); 
     mainleft.setPreferredSize(new Dimension(500,400)); 
     mainleft.setLayout(s_layout); 
     //input textfield 
     input = new JTextField(45); 
     input.addActionListener(this); 
     //reader textarea 
     reader = new JTextArea(); 
     reader.setEditable(false); 
     reader.setLineWrap(true); 
     reader.setWrapStyleWord(true); 
     JScrollPane reader_sp = new JScrollPane(reader); 
     reader_sp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); 
     reader_sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 
     reader_sp.setPreferredSize(new Dimension(480,350)); 

     //set layout constraints for reader and input 
     s_layout.putConstraint(SpringLayout.SOUTH, input, 
       -10, 
       SpringLayout.SOUTH, mainleft); 

     s_layout.putConstraint(SpringLayout.NORTH, reader_sp, 
       5, 
       SpringLayout.NORTH, mainleft); 

     //add all of the components to left panel 
     mainleft.add(reader_sp); 
     mainleft.add(input); 

     //add left panel to masterpanel 
     all.add(mainleft); 

     //add masterpanel to jframe 
     add(all); 

    } 

    public void actionPerformed(ActionEvent VK_ENTER) { 

     //get the command from input area 
     String text = input.getText(); 
     //append input to reader plus a new line 
     reader.append(text + "\n"); 
     //clear input area 
     input.setText(""); 
     //reset reader's caret position for next append 
     reader.setCaretPosition(reader.getDocument().getLength()); 


    } 


    private static void createAndShowGUI() { 

     JFrame f = new JFrame("why doesn't this work?"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.add(new Gui()); 
     f.pack(); 
     f.setLocationRelativeTo(null); //centers it 
     f.setResizable(true); 
     f.setVisible(true); 

    } 

    public static void main(String[] args) { 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowGUI(); 
      } 
     }); 
    } 
} 
+0

あなたのActionListenerは問題ありません。私はあなたのレイアウトの使用のためにあなたのコンポーネントを見ていないよ。 –

答えて

3

allパネルとmainLeftパネルに同じレイアウトオブジェクトを使用しています。 all.setLayout(s_layout)またはmainleft.setLayout(s_layout)行を削除して見てください。

+0

wtf私はばかです。どうもありがとうございます。 – whuff739

1

あなたの問題はLayoutManagerの中に、またはあなたのレイアウト上の制約にある...あなたはFlowLayoutをするs_layoutを変更した場合、例えば、あなたのコンポーネントが表示されます。

関連する問題