2015-04-22 41 views
0

我想让我的JTextFielddesc)下JSpinner,(dayspinner),但我不知道如何。如果我把文本字段放在SOUTH中,它就会一直走到窗口的底部。我也想用我的开始菜单来实现这个问题的任何解决方案,其中3个按钮紧挨着,我宁愿将它们放在另一个上面。如何使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 -and-的gridx-Y-工作到SC) –

相关问题