2014-02-19 56 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

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