2017-02-19 7 views
-2

対応するボタンを押すとラベルがウィンドウの中央に表示されるようにしようとしていますが、その代わりにボタンの上に座っていて、わかりません。私のラベルセンターはなぜですか?

import javax.swing.JFrame; 
import javax.swing.JButton; 
import javax.swing.JLabel; 
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
public class navigator extends JFrame 
{ 
Container con; 
public navigator(){ 
    super("JFrame"); 


    JFrame newFrame = new JFrame("Navigator"); 
    newFrame.setSize(400, 400); 
    newFrame.setVisible(true); 
    newFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 


    con = getContentPane(); 
    BorderLayout newLayout = new BorderLayout(); 
    con.setLayout(newLayout); 



    JButton newButton = new JButton("Up"); 
    newFrame.add(newButton, BorderLayout.NORTH); 

    JButton newButton2 = new JButton("Left"); 
    newFrame.add(newButton2, BorderLayout.WEST); 

    JButton newButton3 = new JButton("Down"); 
    newFrame.add(newButton3, BorderLayout.SOUTH); 


    JButton newButton4 = new JButton("Right"); 
    newFrame.add(newButton4, BorderLayout.EAST); 




    JLabel newLabel = new JLabel("Going up!"); 
    newFrame.add(newLabel, BorderLayout.CENTER); 
    newLabel.setVisible(false); 
    newButton.add(newLabel); 


    JLabel newLabel2 = new JLabel("Going left!"); 
    newFrame.add(newLabel2, BorderLayout.CENTER); 
    newLabel2.setVisible(false); 
    newButton2.add(newLabel2); 


    JLabel newLabel3 = new JLabel("Going down!"); 
    newFrame.add(newLabel3, BorderLayout.CENTER); 
    newLabel3.setVisible(false); 
    newButton3.add(newLabel3); 


    JLabel newLabel4 = new JLabel("Going right!"); 
    newFrame.add(newLabel4, BorderLayout.CENTER); 
    newLabel4.setVisible(false); 
    newButton4.add(newLabel4); 



    newButton.addActionListener(new ActionListener() 
    { 
    public void actionPerformed(ActionEvent e) 
    { 
    newLabel.setVisible(true); 
    newLabel2.setVisible(false);   
    newLabel3.setVisible(false); 
    newLabel4.setVisible(false); 
    } 
    }); 



    newButton2.addActionListener(new ActionListener() 
    { 
    public void actionPerformed(ActionEvent e) 
    { 
    newLabel2.setVisible(true); 
    newLabel.setVisible(false); 
    newLabel3.setVisible(false); 
    newLabel4.setVisible(false); 
    } 
    }); 



    newButton3.addActionListener(new ActionListener()  
    { 
    public void actionPerformed(ActionEvent e) 
    { 
    newLabel3.setVisible(true); 
    newLabel2.setVisible(false); 
    newLabel.setVisible(false); 
    newLabel4.setVisible(false); 
    } 
    }); 



    newButton4.addActionListener(new ActionListener()  
    { 
    public void actionPerformed(ActionEvent e) 
    { 
    newLabel4.setVisible(true); 
    newLabel2.setVisible(false); 
    newLabel3.setVisible(false); 
    newLabel.setVisible(false); 
    } 
    }); 


} 

    public static void main(String[] args){     
    navigator myNavigator = new navigator();  
    } 

    } 
+1

ようこそスタックオーバーフロー! [あなたのステップデバッガはあなたに何を教えてくれるのですか?](BorderLayout)(http://stackoverflow.com/questions/25385173/what-is-a-debugger-and-how-can-it-help-me-diagnose-problems) 「センター」は、あなたが思うものではありません。 [Javadoc](https://docs.oracle.com/javase/tutorial/uiswing/layout/border.html)を読んだことがありますか? –

+0

@Jarrod Robersonそれは正常に動作していますが、私は論理エラーを起こしました。何が間違っているか分かりません。これは私が得ている出力です。 https://gyazo.com/5438c9abf42965922fc99bd429288c6c –

答えて

1
JLabel newLabel = new JLabel("Going up!"); 
newFrame.add(newLabel, BorderLayout.CENTER); 
newLabel.setVisible(false); 
newButton.add(newLabel); // ??? 

コンポーネントには1つの親しか存在できません。したがって、フレームとボタンにラベルを追加することはできません。私はなぜあなたがボタンにラベルを追加しようとしているのかもわかりません。

いずれの場合でも、フレームの中央に4つのラベルを追加することはできません。 BorderLayoutは各領域内の1つのコンポーネントのみを許可するため、最後に追加されたコンポーネントのみが表示されます。 BorderLayoutは最後に追加されたボタンのサイズのみを設定します。他のすべてのボタンは(0、0)のサイズを持つので、ペイントするものはありません。

したがって、単一のラベルを追加し、次にActionListenerのsetText(...)メソッドを使用してテキストを変更します。

ただし、これを修正すると問題は解決します。デフォルトでは、ラベルに使用可能なスペースの左側にラベルが表示されます。

あなたが中央に表示されるテキストをしたい場合は、あなたが使用する必要があります。

label.setHorizontalAlignment(JLabel.CENTER); 

また、すべてのコンポーネントは、フレームを可視化する前にフレームに追加する必要があります。

最後に、クラス名は大文字で始まる必要があります。 JDK APIのクラス名を見て、それらの規約に従ってください。

+0

これは大きな助けになりました.D。私は途中でボタンにラベルを追加する理由がないことに気づきました。ダム・エラーです。助けてくれてありがとう! –

0

BorderLayoutを使用する場合は、各セクションに1つのコントロールしか配置できません。たとえば、CENTERには1つのボタンしか置くことができません。

さらに多くのものを1つの領域に入れたい場合は、新しいJPanelを作成し、それをCENTERに配置し、新しく作成したJPanelにボタンを配置する必要があります。 (もちろん同じレイアウトルールに従ってください)。あなたは再帰的に多くのjpanelを好きなだけ追加することができます。

+0

パネルを作ってラベルを貼り付けましたが、上部に表示されています。私はまた、ボタンを作成しようとしました、それはfalseへの可視性を設定し、それにラベルを貼り付けましたが、その後には "Going right!"表示されます。また、これは私がトップhttps://gyazo.com/3f7de3a565d148acb57051820be3d422に現れて意味するものです –

関連する問題