2015-04-22 5 views
0

Я пытаюсь получить мой JTextField (desc) под JSpinner, (dayspinner), но я не уверен, как это сделать. Если я поместил текстовое поле в SOUTH, он просто дойдет до конца окна. Я также хотел бы реализовать любое решение этой проблемы с моим начальным меню с тремя кнопками рядом друг с другом, я бы очень хотел, чтобы они были друг на друга.Как сделать элемент JPanel доступным под другим элементом в том же BorderLayout?

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

public class Scheduler { 

    JButton VDay, VWeek, Task, Exit; 
    JFrame wframe, dframe, tframe; 
    JTextField hin, min, desc; 
    JLabel time; 
    JSpinner dayspinner; 

    class ButtonListener implements ActionListener { 
    public void actionPerformed(ActionEvent e) { 
     if (e.getSource() == VDay) { 
     dframe.setVisible(true); 
     } else if (e.getSource() == VWeek) { 
     wframe.setVisible(true); 
     } else if (e.getSource() == Task) { 
     tframe.setVisible(true); 
     } else if (e.getSource() == Exit) { 
     System.exit(0); 
     } 
    } 
    } 

    public String[] getDayStrings() { 
    String[] dayStrings = { 
     "Sunday", 
     "Monday", 
     "Tuesday", 
     "Wednesday", 
     "Thursday", 
     "Friday", 
     "Saturday", 
    }; 
    return dayStrings; 
    } 


    public void CreateFrame() { 
    JFrame frame = new JFrame("Main Menu"); 
    frame.setSize(350, 250); 
    frame.setVisible(true); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 


    ButtonListener btnlst = new ButtonListener(); 
    VDay = new JButton("View Day"); 
    VWeek = new JButton("View Week"); 
    Task = new JButton("Assign/Edit Tasks"); 
    Exit = new JButton("Exit"); 

    VDay.addActionListener(btnlst); 
    VWeek.addActionListener(btnlst); 
    Task.addActionListener(btnlst); 
    Exit.addActionListener(btnlst); 

    JPanel center = new JPanel(); 
    JPanel south = new JPanel(); 
    south.add(Exit); 
    center.add(Task); 
    center.add(VDay); 
    center.add(VWeek); 
    frame.add(south, BorderLayout.SOUTH); 
    frame.add(center, BorderLayout.CENTER); 
    frame.setVisible(true); 


    dframe = new JFrame("Today's Schedule"); 
    dframe.setSize(500, 500); 
    dframe.setVisible(false); 

    wframe = new JFrame("Week's Schedule"); 
    wframe.setSize(1050, 400); 
    wframe.setVisible(false); 

    tframe = new JFrame("Edit/Add Tasks"); 
    tframe.setSize(500, 500); 
    tframe.setVisible(false); 

    //GUI for tframe 
    JPanel tnorth = new JPanel(); 
    JPanel tcenter = new JPanel(); 
    JPanel tsouth = new JPanel(); 
    tframe.add(tnorth, BorderLayout.NORTH); 
    tframe.add(tcenter, BorderLayout.CENTER); 
    tframe.add(tsouth, BorderLayout.SOUTH); 

    //time input 
    time = new JLabel("Time (HH:MM): "); 
    tnorth.add(time); 
    hin = new JTextField(2); 
    hin.setColumns(5); 
    tnorth.add(hin); 
    min = new JTextField(2); 
    min.setColumns(5); 
    tnorth.add(min); 

    //select day 
    String[] dayStrings = getDayStrings(); 
    dayspinner = new JSpinner(new SpinnerListModel(dayStrings)); 
    dayspinner.setPreferredSize(new Dimension(85, 20)); 
    tcenter.add(dayspinner); 

    //event description 
    desc = new JTextField(35); 
    desc.setColumns(30); 
    tcenter.add(desc); 


    } 


    public static void main(String[] args) { 
    Scheduler scheduler = new Scheduler(); 
    scheduler.CreateFrame(); 
    } 
} 

ответ

1

Не используйте BorderLayout, он не предназначен, чтобы сделать то, что вы хотите, рассмотреть вопрос пытаются использовать что-то вроде GridBagLayout вместо, который является гораздо более гибким,

См How to Use GridBagLayout для получения более подробной информации

+0

У меня есть пытался использовать GridBagLayout, и я определенно вижу, что он может делать то, что я хочу, но я просто не знаю, как это сделать. Если вы хотите немного помочь, вот ссылка на новый вопрос, который я разместил [ссылка] (http://stackoverflow.com/questions/29811091/how-does-gridbaglayout-functions-such-as-gridwidth-height и-gridx-у-работа-к-SC) –