Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 试图在JFrame中显示2个JPanel_Java_Swing_Jframe_Jpanel - Fatal编程技术网

Java 试图在JFrame中显示2个JPanel

Java 试图在JFrame中显示2个JPanel,java,swing,jframe,jpanel,Java,Swing,Jframe,Jpanel,我的目标是在日历下面创建一个方形框,当在程序中单击日期时,我可以在其中显示事件。首先,我需要创建那个框。这是我目前的代码: package calendar; import javax.swing.JFrame; import javax.swing.*; import javax.swing.event.*; import javax.swing.table.*; import java.awt.*; import java.awt.event.*; import java.util.*;

我的目标是在日历下面创建一个方形框,当在程序中单击日期时,我可以在其中显示事件。首先,我需要创建那个框。这是我目前的代码:

package calendar;
import javax.swing.JFrame; 
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;


public class CalendarView extends JFrame  {
    DefaultTableModel table;
    Calendar cal = new GregorianCalendar();
    JLabel label;
    JLabel eventsLabel;
    

    CalendarView() {
        this.setTitle("Sai's Calendar :}");
        this.setSize(400, 400); 
        this.setResizable(false);
        this.setLayout(new BorderLayout());
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


        label = new JLabel("Sais Calendar :)");
        eventsLabel = new JLabel("EVENTS");
        
        //label.setHorizontalAlignment(SwingConstants.CENTER);
        
        JButton create = new JButton("CREATE");
        create.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                 
            }
        });
        
        JButton quit = new JButton("QUIT");
        create.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                 
            }
        });
        
        

        //making prev & next buttons 
        JButton prev = new JButton("<<");
        prev.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                cal.add(Calendar.MONTH, -1);
                monthUpdate(); 
            }
        });


        JButton next = new JButton(">>"); 
        next.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                cal.add(Calendar.MONTH, +1);
                monthUpdate(); 
            }
        });
        
        JPanel root = new JPanel(new BorderLayout());

        JPanel panel = new JPanel();
        panel.setLayout(new BorderLayout());
        panel.add(prev,BorderLayout.WEST);
        panel.add(label,BorderLayout.SOUTH);
        panel.add(next,BorderLayout.EAST);
        panel.add(create,BorderLayout.NORTH);
        panel.add(quit,BorderLayout.CENTER);
        
        
        JPanel events = new JPanel();
        events.setLayout(new BorderLayout());
        events.setBackground(Color.red);
        events.setPreferredSize(getPreferredSize());
        
        
        
        String[] days = {"Sun", "Mon", "Tue", "Wed", "Thurs", "Fri", "Sat"}; 
        table = new DefaultTableModel(null, days);
        JTable caltable = new JTable(table);
        caltable.setCellSelectionEnabled(true);
        caltable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

        // listen for cell selections using mouse listener to listen for clicks
        caltable.addMouseListener(new MouseListener() {
            public void mousePressed(MouseEvent e) {
                int row = caltable.getSelectedRow();
                int column = caltable.getSelectedColumn();

                //going to have to this to get stuff done on this date on calendar metohod 
                Object data = table.getValueAt(row, column);
            }
            public void mouseClicked(MouseEvent e) { }
            public void mouseReleased(MouseEvent e) { }
            public void mouseEntered(MouseEvent e) { }
            public void mouseExited(MouseEvent e) { }
        });
        JScrollPane pane = new JScrollPane(caltable);

        this.add(panel,BorderLayout.NORTH);
        this.add(pane,BorderLayout.CENTER);
        this.add(events,BorderLayout.SOUTH);

        this.monthUpdate();


    }

    protected void monthUpdate() {
        cal.set(Calendar.DAY_OF_MONTH, 1);
        String month = cal.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.US);
        int year = cal.get(Calendar.YEAR);
        label.setText(month + " " + year);

        int firstDay = cal.get(Calendar.DAY_OF_WEEK);
        int daysInMonth = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
        int weeksInMonth = cal.getActualMaximum(Calendar.WEEK_OF_MONTH);

        table.setRowCount(0);
        table.setRowCount(weeksInMonth);

        int x = firstDay - 1;

        for(int i=1;i <=daysInMonth; i++){
            table.setValueAt(i, x/7 , x%7 );    
            x = x + 1;
        }

    }


}

套餐日历;
导入javax.swing.JFrame;
导入javax.swing.*;
导入javax.swing.event.*;
导入javax.swing.table.*;
导入java.awt.*;
导入java.awt.event.*;
导入java.util.*;
公共类CalendarView扩展了JFrame{
默认表格模型表格;
Calendar cal=新的Gregorianalendar();
JLabel标签;
JLabel eventsLabel;
日历视图(){
此.setTitle(“Sai日历:}”);
这个。设置大小(400400);
此参数为.setresizeable(false);
此.setLayout(新的BorderLayout());
此.setVisible(true);
此.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
标签=新的JLabel(“Sais日历:)”;
eventsLabel=新的JLabel(“事件”);
//标签.设置水平对齐(旋转角度.中心);
JButton create=新JButton(“create”);
create.addActionListener(新建ActionListener()){
已执行的公共无效行动(行动事件ae){
}
});
JButton quit=新JButton(“quit”);
create.addActionListener(新建ActionListener()){
已执行的公共无效行动(行动事件ae){
}
});
//制作上一个和下一个按钮
JButton prev=新JButton(“”);
next.addActionListener(新ActionListener(){
已执行的公共无效行动(行动事件ae){
计算添加(日历月+1);
月更新();
}
});
JPanel root=newjpanel(newborderlayout());
JPanel面板=新的JPanel();
panel.setLayout(新的BorderLayout());
面板。添加(上,边界布局。西);
面板。添加(标签,边界布局。南部);
panel.add(下一步,BorderLayout.EAST);
panel.add(创建,BorderLayout.NORTH);
panel.add(退出,BorderLayout.CENTER);
JPanel事件=新的JPanel();
events.setLayout(新的BorderLayout());
事件。挫折背景(颜色。红色);
setPreferredSize(getPreferredSize());
String[]days={“Sun”、“Mon”、“Tue”、“Wed”、“Thurs”、“Fri”、“Sat”};
table=新的DefaultTableModel(空,天);
JTable caltable=新的JTable(表);
可计算。setCellSelectionEnabled(真);
caltable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
//使用鼠标侦听器侦听单元格选择以侦听单击
caltable.addMouseStener(新的MouseStener(){
公共无效鼠标按下(MouseEvent e){
int row=caltable.getSelectedRow();
int column=caltable.getSelectedColumn();
//要在日历上的这个日期完成事情,就得这么做
对象数据=table.getValueAt(行、列);
}
公共无效mouseClicked(MouseEvent e){}
公共无效MouseEvent e{}
公共无效mouseenterned(MouseEvent e){}
公共无效mouseExited(MouseEvent e){}
});
JScrollPane=新的JScrollPane(caltable);
此.add(面板,BorderLayout.NORTH);
添加(窗格,BorderLayout.CENTER);
添加(事件,BorderLayout.SOUTH);
这个。monthUpdate();
}
受保护的void monthUpdate(){
校准设置(日历日/月/日,1);
String month=cal.getDisplayName(Calendar.month、Calendar.LONG、Locale.US);
int year=cal.get(日历年);
label.setText(月+年);
int firstDay=cal.get(日历日,每周);
int daysInMonth=cal.getActualMaximum(日历日期为每月的第几天);
int weeksInMonth=cal.getActualMaximum(日历周/月);
表1.setRowCount(0);
表.setRowCount(周/月);
int x=第一天-1;

对于(int i=1;i,我想说您的代码的问题是您的日历占用了太多的空间。您的日历将只占用5行

您应该允许“红色”面板增长以填充额外的空间。因此,它应该是添加到边框布局“中心”的面板

因此,您需要创建另一个“包装器”面板:


最后一条语句将允许滚动窗格调整自身大小,以完全显示表,而无需额外空间。

“我希望这是一个正方形”向其中添加内容,并使其成为其自然大小。删除
事件。setPreferredSize(getPreferredSize());
this.setSize(400400);
。然后移动
this.setVisible(true);
到最后一条语句,并在其前面添加
this.pack();
this.add(面板,BorderLayout.NORTH);this.add(面板,BorderLayout.CENTER);this.add(事件,BorderLayout.SOUTH);this.monthUpdate();this.pack();this.setVisible(true);
@andrewhompson仍然是相同的输出..我没有看到任何红方块@andrewhompson停止在GUI上工作。创建一个包含一个事件的事件普通Java getter/setter类。创建一个包含Java.util.List事件实例的CalendarEvent普通Java getter/setter类。一旦有了模型,就可以创建一个日历JPanel和日历事件JPanel由JTable或JTextArea组成,具体取决于您希望如何格式化事件实例。嗯,我现在只在GUI上工作…………@GilbertleBlanch谢谢!这起作用了:)@camickr
this.add(panel,BorderLayout.NORTH);
//this.add(pane,BorderLayout.CENTER);
JPanel wrapper = new JPanel( new BorderLayout() );
this.add(wrapper, BorderLayout.CENTER);
wrapper.add(pane, BorderLayout.PAGE_START);
//this.add(events,BorderLayout.SOUTH);
wrapper.add(events, BorderLayout.CENTER);

this.monthUpdate();
table.setPreferredScrollableViewportSize(table.getPreferredSize());