Java 如何在另一个类中调用静态类

Java 如何在另一个类中调用静态类,java,swing,class,user-interface,Java,Swing,Class,User Interface,您好,我在将框架组合到一个类和另一个类之间存在问题,因此我创建了一个具有JComboBox的程序,如果我单击其中一个,它将显示被调用的类,但在我的日历中,我无法调用它。这是我在另一个类中调用框架的代码 现在这很好,但在我的日历我有一个异常错误,我不能调用它,因为静态?或者我不知道。这是我的日历课 package Patola; import javax.swing.*; import javax.swing.table.*; import java.awt.*; import java.awt.

您好,我在将框架组合到一个类和另一个类之间存在问题,因此我创建了一个具有JComboBox的程序,如果我单击其中一个,它将显示被调用的类,但在我的日历中,我无法调用它。这是我在另一个类中调用框架的代码

现在这很好,但在我的日历我有一个异常错误,我不能调用它,因为静态?或者我不知道。这是我的日历课

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

public class Calendar
{

    static JLabel lblMonth, lblYear;
    static JButton btnPrev, btnNext;
    static JTable tblCalendar;
    static JComboBox cmbYear;
    static JFrame frmMain;
    static Container pane;
    static DefaultTableModel mtblCalendar;
    static JScrollPane stblCalendar;
    static JPanel pnlCalendar;
    static int realYear, realMonth, realDay, currentYear, currentMonth;

    public static void main (String args[]){

        try {UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());}
        catch (ClassNotFoundException e) {}
        catch (InstantiationException e) {}
        catch (IllegalAccessException e) {}
        catch (UnsupportedLookAndFeelException e) {}


        frmMain = new JFrame ("Group Cents");
        frmMain.setSize(330, 375); 
        pane = frmMain.getContentPane();
        pane.setLayout(null);
        frmMain.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


        lblMonth = new JLabel ("January");
        lblYear = new JLabel ("Jump to year :");
        cmbYear = new JComboBox();
        btnPrev = new JButton ("prev");
        btnNext = new JButton ("next");
        mtblCalendar = new DefaultTableModel(){public boolean isCellEditable(int rowIndex, int mColIndex){return false;}};
        tblCalendar = new JTable(mtblCalendar);
        stblCalendar = new JScrollPane(tblCalendar);
        pnlCalendar = new JPanel(null);


        pnlCalendar.setBorder(BorderFactory.createTitledBorder("Calendar"));


        btnPrev.addActionListener(new btnPrev_Action());
        btnNext.addActionListener(new btnNext_Action());
        cmbYear.addActionListener(new cmbYear_Action());


        pane.add(pnlCalendar);
        pnlCalendar.add(lblMonth);
        pnlCalendar.add(lblYear);
        pnlCalendar.add(cmbYear);
        pnlCalendar.add(btnPrev);
        pnlCalendar.add(btnNext);
        pnlCalendar.add(stblCalendar);

        Font font = new Font("Algerian", Font.PLAIN, 14);
        lblMonth.setFont(font);
        lblMonth.setForeground(Color.BLUE);
        pnlCalendar.setBounds(0, 0, 320, 335);
        lblMonth.setBounds(160-lblMonth.getPreferredSize().width/2, 25, 100, 25);
        lblYear.setBounds(10, 305, 150, 20);
        cmbYear.setBounds(230, 305, 80, 20);
        btnPrev.setBounds(10, 25, 60, 25);
        btnNext.setBounds(250, 25, 60, 25);
        stblCalendar.setBounds(10, 50, 300, 250);
        pnlCalendar.setBackground(Color.CYAN);
        btnPrev.setForeground(Color.RED);
        btnNext.setForeground(Color.RED);
        frmMain.setResizable(false);
        frmMain.setVisible(true);
        lblYear.setFont(font);
        lblYear.setForeground(Color.RED);

        GregorianCalendar cal = new GregorianCalendar(); 
        realDay = cal.get(GregorianCalendar.DAY_OF_MONTH); 
        realMonth = cal.get(GregorianCalendar.MONTH); 
        realYear = cal.get(GregorianCalendar.YEAR); 
        currentMonth = realMonth;
        currentYear = realYear;


        String[] headers = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};

        for (int i=0; i<7; i++)
        {
            mtblCalendar.addColumn(headers[i]);
        }

        tblCalendar.getParent().setBackground(tblCalendar.getBackground());


        tblCalendar.getTableHeader().setResizingAllowed(false);
        tblCalendar.getTableHeader().setReorderingAllowed(false);


        tblCalendar.setColumnSelectionAllowed(true);
        tblCalendar.setRowSelectionAllowed(true);
        tblCalendar.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);


        tblCalendar.setRowHeight(38);
        mtblCalendar.setColumnCount(7);
        mtblCalendar.setRowCount(6);


        for (int i=realYear-100; i<=realYear+100; i++)
        {
            cmbYear.addItem(String.valueOf(i));
        }


        refreshCalendar (realMonth, realYear);
    }

    public static void refreshCalendar(int month, int year){

        String[] months =  {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
        int nod, som; 


        btnPrev.setEnabled(true);
        btnNext.setEnabled(true);
        if (month == 0 && year <= realYear-10){btnPrev.setEnabled(false);} 
        if (month == 11 && year >= realYear+100){btnNext.setEnabled(false);} 
        lblMonth.setText(months[month]); 
        lblMonth.setBounds(160-lblMonth.getPreferredSize().width/2, 25, 180, 25); 
        cmbYear.setSelectedItem(String.valueOf(year));


        for (int i=0; i<6; i++)
        {
            for (int j=0; j<7; j++)
            {
                mtblCalendar.setValueAt(null, i, j);
            }
        }


        GregorianCalendar cal = new GregorianCalendar(year, month, 1);
        nod = cal.getActualMaximum(GregorianCalendar.DAY_OF_MONTH);
        som = cal.get(GregorianCalendar.DAY_OF_WEEK);


        for (int i=1; i<=nod; i++)
        {
            int row = new Integer((i+som-2)/7);
            int column  =  (i+som-2)%7;
            mtblCalendar.setValueAt(i, row, column);
        }


        tblCalendar.setDefaultRenderer(tblCalendar.getColumnClass(0), new tblCalendarRenderer());
    }

    static class tblCalendarRenderer extends DefaultTableCellRenderer
    {
        public Component getTableCellRendererComponent (JTable table, Object value, boolean selected, boolean focused, int row, int column)
        {
            super.getTableCellRendererComponent(table, value, selected, focused, row, column);
            if (column == 0 || column == 6)
            { 
                setBackground(new Color(255, 220, 220));
            }
            else
            {
                setBackground(new Color(255, 255, 255));
            }
            if (value != null)
            {
                if (Integer.parseInt(value.toString()) == realDay && currentMonth == realMonth && currentYear == realYear)
                { 
                    setBackground(new Color(220, 220, 255));
                }
            }
            setBorder(null);
            setForeground(Color.black);
            return this;
        }
    }

    static class btnPrev_Action implements ActionListener
    {
        public void actionPerformed (ActionEvent e)
        {
            if (currentMonth == 0)
            { 
                currentMonth = 11;
                currentYear -= 1;
            }
            else{ 
                currentMonth -= 1;
            }
            refreshCalendar(currentMonth, currentYear);
        }
    }
    static class btnNext_Action implements ActionListener
    {
        public void actionPerformed (ActionEvent e)
        {
            if (currentMonth == 11)
            { 
                currentMonth = 0;
                currentYear += 1;
            }
            else
            { 
                currentMonth += 1;
            }
            refreshCalendar(currentMonth, currentYear);
        }
    }

            }
        }
    }
package-Patola;
导入javax.swing.*;
导入javax.swing.table.*;
导入java.awt.*;
导入java.awt.event.*;
导入java.util.*;
公课日历
{
静态JLabel lbl月,lbl月;
静态按钮btnPrev,btnNext;
静态JTable tblCalendar;
静态JComboBox;年度;
静态JMMAIN;
静态容器窗格;
静态DefaultTableModel mtblCalendar;
静态JScrollPane stblCalendar;
静态JPanel pnlCalendar;
静态整数realYear、realMonth、realDay、currentYear、currentMonth;
公共静态void main(字符串参数[]){
请尝试{UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());}
catch(classnotfound异常){}
catch(实例化异常e){}
捕获(非法访问例外){}
捕获(无支持的LookandFeelexception e){}
frmMain=新JFrame(“集团分”);
frmMain.setSize(330,375);
pane=frmMain.getContentPane();
pane.setLayout(空);
frmMain.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
lblMonth=新的JLabel(“一月”);
lblYear=newjlabel(“跳转到年份:”);
cmbYear=新的JComboBox();
btnPrev=新按钮(“上一个”);
btnNext=新的JButton(“下一步”);
mtblCalendar=new DefaultTableModel(){public boolean isCellEditable(int rowIndex,int mColIndex){return false;}};
tblCalendar=新的JTable(mtblCalendar);
stblCalendar=新的JScrollPane(tblCalendar);
pnlCalendar=新JPanel(空);
pnlCalendar.setboorder(BorderFactory.createTitledBorder(“日历”);
addActionListener(新的btnPrev_Action());
addActionListener(新的btnNext_Action());
cmbYear.addActionListener(新cmbYear_Action());
窗格。添加(pnlCalendar);
pnlCalendar.add(磅/月);
pnlCalendar.add(lblYear);
pnlCalendar.add(年度);
pnlCalendar.add(btnPrev);
pnlCalendar.add(btnNext);
pnlCalendar.add(stblCalendar);
Font Font=新字体(“阿尔及利亚”,Font.PLAIN,14);
lblMonth.setFont(字体);
lbl月设置前景(颜色为蓝色);
pnlCalendar.立根(0,0320335);
lblMonth.setBounds(160 lblMonth.getPreferredSize().width/2,25,100,25);
lblYear.立根(10,305,150,20);
一年的挫折(230、305、80、20);
btnPrev.挫折(10,25,60,25);
b下一个立根(250,25,60,25);
立根(10,50,300,250);
pnlCalendar.退根(颜色:青色);
btnPrev.设置前景(颜色为红色);
设置前景(颜色为红色);
frmMain.setresizeable(false);
frmMain.setVisible(真);
lblYear.setFont(字体);
lblYear.setForeground(颜色:红色);
GregorianCalendar cal=新的GregorianCalendar();
realDay=cal.get(GregoriaCalendar.DAY/u月);
realmount=cal.get(gregorianalendar.MONTH);
realYear=cal.get(gregorianalendar.YEAR);
currentMonth=realMonth;
currentYear=realYear;
String[]headers={“Sun”、“Mon”、“Tue”、“Wed”、“Thu”、“Fri”、“Sat”};

对于(int i=0;i您正试图使用Calendar类的对象访问静态变量

 new Calendar().frmMain.setVisible(true);
frmMain
Calendar
类中定义为
static

如果您确定
frmMain
已在
Calendar
类中实例化,则可以使用

Calendar.frmMain.setVisible(true)

我需要做什么,先生?这是我的问题,我需要做什么,或者你建议如何称呼静态部分我不能将其更改为非静态形式sir>。这是Calendar.frmMain.setVisible(true)中的错误;线程“AWT-EventQueue-0”java.lang.NullPointerException at Patola.imagebut$1.actionPerformed(imagebut.java:90)中的异常javax.swing.JComboBox.fireActionEvent(JComboBox.java:1260)javax.swing.JComboBox.setSelectedItem(JComboBox.java:588)javax.swing.JComboBox.setSelectedIndex(JComboBox.java:624)javax.swing.plaf.basic.BasicComboPopup$Handler.mouserereleased(BasicComboPopup.java:835)java.awt.AWTEventMulticaster.mouserereleased(AWTEventMulticaster.java:290)您似乎还没有实例化
frmMain
对象并尝试访问它的
setVisible
方法-这会导致
NullPointerException
我需要做什么,先生?