java - 如何使 JPanel 项目位于同一 BorderLayout 中的另一个项目下?

标签 java swing jtextfield layout-manager jspinner

我正在尝试将我的 JTextField (desc) 置于 JSpinner (dayspinner) 下,但是我不知道怎么办。如果我将文本字段放在 SOUTH 中,它就会一直到达窗口底部。我还想通过我的开始菜单(其中 3 个按钮彼此相邻)来实现此问题的任何解决方案,我更希望它们彼此叠在一起。

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

最佳答案

不要使用 BorderLayout,它的设计目的不是您想要的,请考虑尝试使用 GridBagLayout 之类的东西,它要灵活得多

参见How to Use GridBagLayout了解更多详情

关于java - 如何使 JPanel 项目位于同一 BorderLayout 中的另一个项目下?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29786921/

相关文章:

java - 在Java中创建包含大文件的目录

java - 从 GAE 连接到 MySQL 实例时出现 CommunicationsException

java - JLabel 和 JTextField 字符串比较

java - 如何删除 jtextfield、jbutton 和 raisebevel 边框之间的空间

java - iMacros 框架名称疑难解答

java - 如何提取点​​后的单词

java - 在 java swing 中动态创建项目或允许/禁止用户操作

java - 将滚动条添加到 JTabbedPane 内的 JTextPane?

Java swing/awt 选项卡式 Pane 事件

java: JTextField 的默认文档总是 PlainDocument 吗?