2016-07-27 49 views
0

ボタン以外はすべてウィンドウに表示されます。私は行方不明の何かがありますか? ボタンを初めて使用していて、何がうまくいかないのか分かりません。これはフォーマット上の問題かもしれません。 setLocation()とsetSize()に問題があると誰かに教えてもらえますか?Jframeにボタンが表示されない

import java.awt.BorderLayout; 
import java.awt.Button; 
import java.awt.FlowLayout; 
import java.awt.Font; 
import java.awt.TextField; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 

public class HashString extends JPanel { 


    public static void hashString() { 
    } 

    public void window() { 
    JLabel label1 = new JLabel(
      "Enter Your Strings separated by a comma, below. "); 
    label1.setHorizontalAlignment(JLabel.CENTER); 
    label1.setFont(new Font("Times New Roman", Font.BOLD, 12)); 
    label1.setVerticalAlignment(JLabel.TOP); 

    JTextField field = new JTextField(50); 
    field.setVisible(true); 
    field.setText("Enter Strings Here"); 
    field.setSize(300, 251); 
    field.setHorizontalAlignment(JTextField.CENTER); 
    field.setLocation(135, 60); 

    Button btn = new Button("Enter These Values"); 
    btn.setLocation(240 ,420); 
    btn.setSize(100, 100); 
    btn.setVisible(true); 
    btn.setFont(new Font("Times new roman",Font.BOLD,12)); 

    JFrame frame = new JFrame("Test1"); 
    frame.add(new HashString()); 
    frame.add(btn); 
    frame.setVisible(true); 
    frame.add(field); 
    frame.setLocationRelativeTo(null); 
    frame.add(label1); 
    frame.setSize(600, 450); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

} 

}

+0

最後にセットされたセットです。 –

答えて

2

私はあなたがプログラムを構造化しましたどのように変更すべきだと思います。 JFrameの中に手動で配置する代わりに、BorderLayoutのようなレイアウトマネージャを使うだけで簡単に実装できます。

また、EventQueueのすべてのアドレスを指定する必要があります。他のスレッドは指定しないでください。さらに、ButtonなどのAWTコンポーネントとJButtonなどのSwingコンポーネントを組み合わせて一致させることはお勧めできません。 Java 1.6のように以前よりもはるかに優れていますが、それでもいくつかの問題が発生する可能性があります。

import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import java.awt.Font; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import javax.swing.border.EmptyBorder; 

public class HashString { // It seems that this isn't a JPanel. Rather, it is an application. 

    JFrame frame; 

    public void initialise() { 

     frame = new JFrame("Test 1"); // You can create the frame of the application here and set title 

     frame.setLocation(200, 200); 
     frame.setSize(300, 300); 

     JPanel contentPanel = new JPanel();  // To allow a border to be set, I've declared a content panel inside the 
               // frame. 
     contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5)); // This sets a border to make everything look nice 
     contentPanel.setLayout(new BorderLayout(5, 5)); // This creates the BorderLayout, which manages the layout of 
                 // the components easily 
     frame.setContentPane(contentPanel); 

     JLabel instructionsLabel = new JLabel("Enter Your Strings separated by a comma, below. "); 
     instructionsLabel.setFont(new Font("Times New Roman", Font.BOLD, 12)); 
     contentPanel.add(instructionsLabel, BorderLayout.NORTH); // BorderLayout.NORTH tells the layout manager where 
                    // to put the component. 

     JTextField txtField = new JTextField(); 
     txtField.setText("Enter Strings Here"); 
     contentPanel.add(txtField, BorderLayout.CENTER); 

     JButton btn = new JButton("Enter These Values"); 
     btn.setFont(new Font("Times new roman", Font.BOLD, 12)); 
     btn.addActionListener(new ActionListener() { 
      @Override public void actionPerformed(ActionEvent e) { 
       // Call whatever method that you want to call when this is relevant. Set textField and other variables 
       // here. You can do things like 'txtField.setText(methodOperationOnString (txtField.getText()))' or 
       // something of the like. 
      } 
     }); 
     contentPanel.add(btn, BorderLayout.SOUTH); 

     frame.setVisible(true); 

    } 

    public static void main(String[] args) { 
     // This tells it to create the entire thing on the GUI thread 
     EventQueue.invokeLater(new Runnable() { 
      @Override public void run() { 
       HashString b = new HashString(); 
       b.initialise(); 
      } 
     }); 
    } 
} 
+1

WOW!それは本当に役に立ちます!私は手動ですべてを行うことに慣れています –

+0

メインメソッドが別のクラスにある場合は、 'public void initialise()'を 'public HashString()'に変更してください。次に、新しいHashString()を呼び出すと自動的に構築されます。もし 'main'を削除することもできます。 – ifly6

+0

JavaFxとSwingを混在させないでください。これはSwingアプリケーションです。ここから初期化しないでください。もしあなたがそうしていれば(あなたはEclipseにいます)、実行コンフィギュレーションを削除する必要があります。 '再生ボタン>実行コンフィギュレーション> HashString'の横にある矢印をクリックし、その実行コンフィギュレーションでdeleteをクリックします。 – ifly6

関連する問題