Java 如何在另一个类中调用静态类
您好,我在将框架组合到一个类和另一个类之间存在问题,因此我创建了一个具有JComboBox的程序,如果我单击其中一个,它将显示被调用的类,但在我的日历中,我无法调用它。这是我在另一个类中调用框架的代码 现在这很好,但在我的日历我有一个异常错误,我不能调用它,因为静态?或者我不知道。这是我的日历课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.
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
我需要做什么,先生?