2016-12-27 5 views
0

Я пытаюсь создать верхние кнопки окна. У меня есть JFrame и JPanel с разными кнопками, когда я пытаюсь добавить панель с кнопками в JPanel на фрейме, он не показывает ... копая и пытаясь найти решение, я понимаю, что проблема когда я устанавливаю ориентацию на панель с помощью кнопок на панели BorderLayout. Я думаю, что это может быть что-то глупое, чего я не понимаю, но я не нашел такой проблемы.BorderLayout ориентация

Проблема здесь, когда я установил ориентацию:

contentPanel.add(buttons,BorderLayout.PAGE_START); 

если я удалить:

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); 
    } 
} 

и это моя панель wi й кнопки:

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 для отображения кнопок.

Просто используйте JPanel с выровненным по правому краю FlowLayout.

Ознакомьтесь с API FlowLayout, чтобы узнать, как правильно выравнивать компоненты, добавленные в панель.

+0

Устранена проблема, любая идея, почему я не могу это сделать с весенним макетом? Я хотел добавить еще несколько компонентов в панель, которую я создаю, и я подумал, что весна даст мне больше настроек, так или иначе, я думаю, что смогу работать с FlowLayout – DarkCrow10

+0

@ DarkCrow10, я уверен, что вы можете это сделать с SpringLayout. Но SpringLayout - сложный менеджер компоновки со многими ограничениями. Ваш код не работает, потому что ваши ограничения неверны. Так зачем использовать его, когда FlowLayout настолько прост. Если вы хотите поэкспериментировать с SpringLayout, начните с рабочих примеров из учебника Swing в [Как использовать SpringLayout] (http://docs.oracle.com/javase/tutorial/uiswing/layout/spring.html). – camickr