2014-02-19 35 views
0

我在某个地方,但现在我遇到了更大的障碍:我似乎无法理解如何创建一个侦听器,将我的JLabel上的信息更改为输入并输出存储在我的JTextArea中的信息。GUI问题:甚至不知道从哪里开始

这里是我的代码给你一个想法:

public class DisplayStudent extends JFrame { 
private JMenuItem jmiConnect, jmiClose, jmiExit, jmiSearch, jmiClear; 
private JPanel contentPane; 
private JPanel contentPane2; 
private JTextArea info; 
private String information; 

public JPanel contentPane() { 
    JPanel something = new JPanel(new BorderLayout()); 
    //something.setLayout(); 

    String information; 

    info = new JTextArea(4, 30); 
    info.setEditable(false); 
    info.setLineWrap(true); 
    info.setWrapStyleWord(true); 

    JPanel one = new JPanel(); 
    one.setBackground(Color.WHITE); 
    one.setSize(50, 50); 
    one.add(info, BorderLayout.CENTER); 
    something.add(one, BorderLayout.NORTH); 

    JPanel two = new JPanel(new BorderLayout()); 
    two.setBackground(null); 
    two.setSize(10, 10); 
    two.add(new JLabel(" No Connection "), BorderLayout.WEST); 
    two.add(new JLabel(" Number of Students = "), BorderLayout.EAST); 
    something.add(two); 

    something.setOpaque(true); 
    return something; 
} 

public static void GUI() { 
    JFrame frame = new JFrame("Display Student"); 

    DisplayStudent panel = new DisplayStudent(); 
    frame.setContentPane(panel.contentPane()); 

    DisplayStudent bar = new DisplayStudent(); 
    frame.setJMenuBar(bar.DisplayStudent()); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(400, 150); 
    frame.setVisible(true); 
    //frame.setJMenuBar(jmb); 
} 

public JMenuBar DisplayStudent() { 
//Drop down menu 
JMenuBar jmb = new JMenuBar(); 

    JMenu fileMenu = new JMenu("File"); 
    fileMenu.setMnemonic('F'); 
    jmb.add(fileMenu); 


    JMenu editMenu = new JMenu("Edit"); 
    editMenu.setMnemonic('E'); 
    jmb.add(editMenu); 

    //Buttons in menu - "File" menu 
    JMenuItem jmiConnect = new JMenuItem("Connect", 'C'); 
    JMenuItem jmiClose = new JMenuItem("Close", 'L'); 
    JMenuItem jmiExit = new JMenuItem("Exit", 'E'); 

    fileMenu.add(jmiConnect); 
    fileMenu.add(jmiClose); 
    fileMenu.add(jmiExit); 

    //Buttons in menu - "Edit" menu 
    JMenuItem jmiSearch = new JMenuItem("Search", 'S'); 
    JMenuItem jmiClear = new JMenuItem("Clear", 'B'); 

    editMenu.add(jmiSearch); 
    editMenu.add(jmiClear); 

    jmiConnect.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     String database_name; 
     System.out.println("Please enter your database."); 
     Scanner input = new Scanner(System.in); 
     database_name = input.next(); 
    } 
    }); 

    jmiClose.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     int reply = JOptionPane.showConfirmDialog(null, "Are you sure you want to quit?", "Question!", JOptionPane.YES_NO_OPTION); 
    if (reply == JOptionPane.YES_OPTION) { 
     JOptionPane.showMessageDialog(null, "Toodleloo!"); 
    } 
    } 
    }); 

    jmiExit.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     System.exit(0); 
    } 
    }); 

    jmiSearch.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     System.exit(0); 
    } 
    }); 

    jmiClear.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     System.exit(0); 
    } 
    }); 

    return jmb; 
} 

public static void main(String[] args) { 
    GUI(); 

} 
    } 

我为继续咨询遗憾。阅读不足以理解这一点。我再次感谢你们的帮助。

好的,当我回去时,我得到了一个很大的错误。这里是:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
at displaystudent.DisplayStudent$1.actionPerformed(DisplayStudent.java:119) 
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) 
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) 
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
at javax.swing.AbstractButton.doClick(AbstractButton.java:376) 
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:833) 
at com.apple.laf.AquaMenuItemUI.doClick(AquaMenuItemUI.java:157) 
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:877) 
at java.awt.Component.processMouseEvent(Component.java:6505) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3320) 
at java.awt.Component.processEvent(Component.java:6270) 
at java.awt.Container.processEvent(Container.java:2229) 
at java.awt.Component.dispatchEventImpl(Component.java:4861) 
at java.awt.Container.dispatchEventImpl(Container.java:2287) 
at java.awt.Component.dispatchEvent(Component.java:4687) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) 
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 
at java.awt.Container.dispatchEventImpl(Container.java:2273) 
at java.awt.Window.dispatchEventImpl(Window.java:2719) 
at java.awt.Component.dispatchEvent(Component.java:4687) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735) 
at java.awt.EventQueue.access$200(EventQueue.java:103) 
at java.awt.EventQueue$3.run(EventQueue.java:694) 
at java.awt.EventQueue$3.run(EventQueue.java:692) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 
at java.awt.EventQueue$4.run(EventQueue.java:708) 
at java.awt.EventQueue$4.run(EventQueue.java:706) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91) 

如果我问得太多,我很抱歉。我现在在我的智慧结束。

+0

你可以使用'DocumentListener'监听监视更改到'JTextArea',这是小重手和一些关于你想要达到什么的更多信息会有帮助... – MadProgrammer

+0

@MadProgrammer啊,我真的很抱歉。我想要实现的是一个有几个JMenuItems的程序。其中一个JMenuItems(“Connect”)假设向用户请求输入,然后将该输入存储在database_name下,并将名称传输给JLabel,将其从“无连接”更改为“连接到数据库名称”,并显示存储在JTextArea中的信息。 – Zanpo

+0

那么'JTextArea#appendText'有什么问题?您需要将“连接”标签设置为实例变量,以便您在需要时访问它 – MadProgrammer

回答

1

“转移出来的名字与JLabel的更改为”无连接“以”连接到数据库名称“

问题:您JLabel没有对象引用你这样做

two.add(new JLabel(" No Connection "), BorderLayout.WEST); 

这使得困难(并非不可能),以获得访问JLabel,而是给它像

参考
JLabel statusLabel = new JLabel(" No Connection "); 
public JPanel contentPane() { 
    two.add(statusLabel, BorderLayout.WEST); 

然后,您可以从JMenuItem的监听器访问它。

jmiConnect.addActionListener(new ActionListener(){ 
    public void actionPerformed(ActionEvent e) { 
     ... 
     statusLabel.setText(...); 
    } 
}); 

这里的另一项建议,不要试图与GUI混合控制台,即Scanner(System.in)。您可能想要使用类似于JOptionPane.showInputDialog(..)甚至是JCheckBoxMenuItem的东西,这是一个复选框,带有您可以检查的数据库名称。然后它只是将结果附加到来自侦听器的文本区域。


UPDATE

  • 你为什么要创建一个新的DisplayStudent放于框架?由于该方法返回一个JPanel只是这样做

    JPanel panel = contentPane(); 
    frame.setContentPane(panel); 
    
  • 不要让你的类扩展JFrame。您已经在使用JFrame的实例作为顶级容器。摆脱extends JFrame

  • 不要打电话给你的方法,返回JMenuBar与你的班级DisplayStudent同名。取名类似createMenuBar(),那么就做这个

    JMenuMenuBar menuBar = createMenuBar(); 
    frame.setJMenuBar(menuBar); 
    
  • 摆脱两个DisplayStudent .. = new DisplayStudent();

+0

我很感激,朋友。我回去重新编写了JLabels,一旦我回过头来提交我的输入,我得到了一个错误。那是一个很大的问题。 – Zanpo

+0

@赞保抱歉,但我不能猜出错误是什么。 –

+0

@赞布看我的**更新** –