【发布时间】:2014-04-10 03:24:32
【问题描述】:
目前我在尝试使用新信息更新我的 JFrame 时遇到了一个重大问题。 我尝试了通常的无效、验证、重绘等。
以下是创建 JFrame 的主要代码:
package Calendar;
import javax.swing.*;
import java.awt.*;
import java.util.GregorianCalendar;
import java.awt.Frame;
public class Main extends JFrame
{
public Main()
{
}
public void makeFrame()
{
JFrame frame = new JFrame("Programming II Project: Calendar");
setLayout(new BorderLayout(0, 5));
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setMinimumSize(new Dimension(640, 384));
}
public void makeCenter(int year, int month)
{
// Add center
//new JFrame();
//this.setVisible(true);
JPanel p = new JPanel(new BorderLayout());
p.add(calendarPanel.makeCalendar(year, month));
add(p, BorderLayout.CENTER);
System.out.println("----- FRAME WINDOWS -----");
Frame[] frames = Frame.getFrames();
for (Frame frame : frames)
System.out.println(frame.getName() + ": " + frame.getClass());
//this.setMinimumSize(new Dimension(512, 384));
}
public void makeEast()
{
JPanel p = new JPanel(new BorderLayout());
Clock myClock = new Clock();
p.add(myClock);
p.setForeground(Color.red);
this.add(p, BorderLayout.EAST);
}
public void makeNorth()
{
// Add north
northPanel np = new northPanel();
this.add(np, BorderLayout.NORTH);
}
public static void main(String[] args)
{
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (ClassNotFoundException e)
{
System.out.println("ClassNotFoundException");
}
catch (InstantiationException e)
{
System.out.println("InstantiationException");
}
catch (IllegalAccessException e)
{
System.out.println("IllegalAccessException");
}
catch (UnsupportedLookAndFeelException e)
{
System.out.println("UnsupportedLookAndFeelException");
}
Main m = new Main();
m.makeFrame();
m.makeCenter(GregorianCalendar.YEAR, GregorianCalendar.MONTH);
m.makeNorth();
m.makeEast();
m.setVisible(true);
}
}
这是用来切换 JFrame 的按钮代码: 这是一个完全不同的类别
static class bNextMonth_Method implements ActionListener{
public void actionPerformed (ActionEvent e)
{
if (clickm == 11)
{
clicky = clicky + 1;
clickm = 0;
System.out.println(clickm);
System.out.println(clicky);
Main m = new Main();
m.makeCenter(clicky, clickm);
m.makeNorth();
m.makeEast();
}
else
{
clickm = clickm + 1;
System.out.println(clickm);
System.out.println(clicky);
Main m = new Main();
m.makeCenter(clicky, clickm);
m.makeNorth();
m.makeEast();
}
}
}
现在您会注意到在 makeCenter 方法的第一段代码中被注释掉的东西。如果我取消注释它的信息会发生变化,但它每次都会创建一个新窗口。
现在,即使 dispose() 目前不在其中,我还是将它放在 makeCenter 方法中,因为这是从按钮调用的。我可以说按钮工作正常,因为
System.out.println("----- 框架窗口-----");
每次单击时都会更新并列出一个新框架。
必须有一些非常简单的东西。
我还想说,我在这里遗漏了另一个名为 Clock.java 的类。
这确实有一个计时器,但我不确定这是否会中断任何事情。
编辑:我想这就是你的意思?
public class bNextMonth_Method implements ActionListener{
private Main main;
public bNextMonth_Method(Main main) {
this.main = main;
}
public void actionPerformed (ActionEvent e)
{
if (clickm == 11)
{
clicky = clicky + 1;
clickm = 0;
System.out.println(clickm);
System.out.println(clicky);
main.makeCenter(clicky, clickm);
main.makeNorth();
main.makeEast();
}
else
{
clickm = clickm + 1;
System.out.println(clickm);
System.out.println(clicky);
Main m = new Main();
main.makeCenter(clicky, clickm);
main.makeNorth();
main.makeEast();
}
}
}
这是我最好的解释,但它抛出了
bNextYear_Method中的bNextYear_Method(Main)不能应用于()
现在我知道这意味着什么,但我该如何解决呢?
【问题讨论】:
-
让我们从The Use of Multiple JFrames, Good/Bad Practice? 开始,然后转到
public class Main extends JFrame,但随后makeFrame正在以任何方式创建它自己的JFrame...我会说你正在失去任何想法实际引用了什么
标签: java swing jframe actionlistener dispose