我在jbutton点击打开不同的挥杆类时遇到问题。在动作监听器中,我将使用以下内容
JButton searchComputerButton = new JButton("Search");
searchComputerButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
MISMain misMain = new MISMain();
misMain.setVisible(true);
etc...
但我在misMain.setVisible(true)上遇到红色波浪形错误,我不确定为什么。 它说“方法setVisible(boolean)未定义为MISMain类型” 这两个类都在Eclipse中的同一个包中,它识别MISMain类,所以我不确定为什么我会收到错误。如果您需要其他信息,请与我们联系。任何帮助表示赞赏。
根据要求,MISMain的第一部分
public MISMain() throws IOException {
initialize();
}
/**
* Initialize the contents of the frame.
*
* @throws IOException
*/
private void initialize() throws IOException {
frame = new JFrame();
frame.getContentPane().setBackground(Color.LIGHT_GRAY);
frame.getContentPane().setForeground(Color.RED);
frame.setBounds(100, 100, 658, 618);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
frame.setTitle("MIS Advanced Computerers");
frame.setResizable(false);
FileWriter fw = new FileWriter("C:\\Users\\anoc5f\\Desktop\\Output.txt");
File tempFile = new File("myTempFile.txt");
JButton searchComputerButton = new JButton("Search");
searchComputerButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String line;
BufferedWriter bw = null;
BufferedWriter writer = null;
try {
writer = new BufferedWriter(new FileWriter(tempFile));
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String s = null;
Process p = null;
/*
* try { // p = Runtime.getRuntime().exec(
* "cmd /c start c:\\computerQuery.bat computerName"); } catch
* (IOException e1) { // TODO Auto-generated catch block
* e1.printStackTrace(); }
*/
try {
p = Runtime.getRuntime().exec("c:\\computerQuery.bat");
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
StringBuffer sbuffer = new StringBuffer();
BufferedReader in = new BufferedReader(new InputStreamReader(p
.getInputStream()));
try {
while ((line = in.readLine()) != null) {
System.out.println(line);
// textArea.append(line);
String dn = "CN=FDCD111304,OU=Workstations,OU=SIM,OU=Accounts,DC=FL,DC=NET";
LdapName ldapName = new LdapName(dn);
String commonName = (String) ldapName.getRdn(
ldapName.size() - 1).getValue();
}
ComputerQuery.sendParam();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (InvalidNameException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} finally
{
try {
fw.close();
}
catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
try {
in.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
ComputerQuery.sendParam();
}
});
答案 0 :(得分:1)
您可以向MSMain
添加一个方法,使frame
可见:
public void setVisible(boolean input){
frame.setVisible(input);
}
没有展开JFrame
。
答案 1 :(得分:1)
正如评论中所述,您无法在setVisible
上调用MISMain
方法,因为该类没有setVisible
方法。相反,它是JFrame
的一部分。
有两种解决方案可行。
一个是MISMain IS-A JFrame。该实现看起来像这样。注意:由于MISMain本身就是JFrame,因此您不必拥有框架成员变量。
class MISMain extends JFrame {
public MISMain() throws IOException {
getContentPane().setBackground(Color.LIGHT_GRAY);
getContentPane().setForeground(Color.RED);
setBounds(100, 100, 658, 618);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().setLayout(null);
setTitle("MIS Advanced Computerers");
setResizable(false);
//All other code.
}
}
然后从actionPerformed
您可以创建一个新的MISMain实例并在其上调用setVisible(true);
,并且框架将可见。
第二种方法是MISMain HAS-A JFrame。此实现基本上看起来像您当前的实现。但是你必须添加一些能使框架可见的代码。
class MISMain {
JFrame frame;
//... other field
//..all the implementations you have
//Now add a method like : show() as below
public void show() {
frame.setVisible(true);
}
}
至少在Swing窗口的情况下,IS-A方法比HAS-A更直观。
答案 2 :(得分:-1)
MISMain不是一个框架 - 对吧?
因此您无法将其设置为可见。为“框架”添加一个getter(并使其成为成员)。您可以设置框架可见。