2016-12-27 14 views
0

ウィンドウのトップボタンを作成しようとしています。フレーム上のJPanelにボタンを含むパネルを追加しようとすると、JFrameと異なるボタンを持つJPanelが表示されますが、表示されません。解決策を見つけようとすると、問題はBorderLayoutパネルのボタンを使ってパネルに向きを設定したとき。私はそれが私が気づいていない何かばかげたかもしれないと思うが、私はこのような問題を見つけていない。BorderLayout orientation

私は向きを設定する場合、問題はここにある:

contentPanel.add(buttons,BorderLayout.PAGE_START); 

私は削除する場合:に

package view; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 

import java.awt.Color; 
import java.awt.CardLayout; 
import java.awt.BorderLayout; 

public class MainFrame extends JFrame{ 
private JPanel contentPanel, layOutPanel; 
private CardLayout mainCardLayout; 
private BorderLayout borderLayout; 
private static MainFrame instance = null; 
private FrameButtonsPanel buttons; 

private MainFrame(){ 
setSize(1000,700); 
//setUndecorated(true); 
setLocationRelativeTo(null); 
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 


contentPanel = new JPanel(); 
borderLayout = new BorderLayout(); 
contentPanel.setLayout(borderLayout); 
add(contentPanel); 

buttons = new FrameButtonsPanel(); 
buttons.setBackground(Color.red); 
contentPanel.add(buttons,BorderLayout.PAGE_START); 

/*layOutPanel = new JPanel(); 
mainCardLayout = new CardLayout(); 
layOutPanel.setLayout(mainCardLayout); 
layOutPanel.setBackground(Color.red); 
contentPanel.add(layOutPanel,BorderLayout.SOUTH);*/ 
} 

public static MainFrame getInstance(){ 
    if (instance == null){ 
    instance = new MainFrame(); 
    } 
    return instance; 
} 

    public static void main(String[] args) { 
    MainFrame.getInstance().setVisible(true); 
    } 
} 

BorderLayout.PAGE_START 

を、それはこれが私のフレームである

の作品

これは私のパネルですthボタン:

package view; 

import javax.swing.JPanel; 
import javax.swing.SpringLayout; 
import javax.swing.Spring; 
import javax.swing.JButton; 
import javax.swing.JFrame; 

import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 

public class FrameButtonsPanel extends JPanel{ 
private Spring spring; 
private JButton iconify, maximize, close; 

    public FrameButtonsPanel(){ 
    SpringLayout mySpring = new SpringLayout(); 
    setLayout(mySpring); 

    iconify = new JButton("-"); 
    add(iconify); 
    maximize = new JButton("O"); 
    add(maximize); 
    close = new JButton("X"); 
    add(close); 

    spring = Spring.constant(850,850,2000); 


mySpring.putConstraint(SpringLayout.WEST,iconify,spring,SpringLayout.WEST,this); 
mySpring.putConstraint(SpringLayout.WEST,maximize,3,SpringLayout.EAST,iconify); 
mySpring.putConstraint(SpringLayout.WEST,close,3,SpringLayout.EAST,maximize); 
mySpring.putConstraint(SpringLayout.EAST,this,3,SpringLayout.EAST,close); 

iconifyWindow(); 
maximizeWindow(); 
closeWindow(); 
} 

private void iconifyWindow(){ 
    iconify.addActionListener(new ActionListener(){ 
    public void actionPerformed(ActionEvent arg0) { 
     MainFrame.getInstance().setExtendedState(JFrame.ICONIFIED); 
    } 
    }); 
} 

private void maximizeWindow(){ 
    maximize.addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent arg0) { 
    if(MainFrame.getInstance().getExtendedState() == JFrame.MAXIMIZED_BOTH){ 
     MainFrame.getInstance().setExtendedState(JFrame.NORMAL); 
    }else{ 
     MainFrame.getInstance().setExtendedState(JFrame.MAXIMIZED_BOTH); 
    } 
     } 
    }); 
    } 

private void closeWindow(){ 
    close.addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent arg0) { 
      System.exit(0); 
     } 
    }); 
} 
} 

答えて

1

なぜ私はボタンを表示するためにSpringLayoutを使用しようとしているのか分かりません。

右寄せFlowLayoutJPanelを使用してください。

パネルに追加されたコンポーネントの右揃えの詳細については、FlowLayout APIをご覧ください。

+0

問題を修正しました。なぜ私はスプリングレイアウトではできないのでしょうか?私は作成しているバーにいくつかのコンポーネントを追加したいと思っていましたが、春はもっとカスタマイズされていると思っていましたが、とにかく私はFlowLayout – DarkCrow10

+0

@ DarkCrow10で解決できると思っています。 SpringLayoutを使用します。しかし、SpringLayoutは、多くの制約を伴う複雑なレイアウトマネージャです。制約が正しくないため、コードが機能しませんでした。だから、なぜFlowLayoutがとてもシンプルな時にそれを使うのですか? SpringLayoutを試したい場合は、[SpringLayoutの使い方](http://docs.oracle.com/javase/tutorial/uiswing/layout/spring.html)のSwingチュートリアルの作業例から始めてください。 – camickr