1

複数のメニュー項目で既に開始されている小さなプログラムがあります。

アイテムをクリックすると、フレームに何かを表示したいのですが、別のアイテムをクリックすると、最初のアイテムが消えて2番目のアイテムが表示されます。

コンソールに印刷できますが、フレームに印刷できないようです。

任意の提案をいただければ幸いです:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class melco extends JFrame{


public static void main(String[] args){
    JFrame frame = new JFrame("Salesman Resources");
    frame.setVisible(true);
    frame.setSize(1000,800);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JMenuBar menubar = new JMenuBar();
    frame.setJMenuBar(menubar);

    JMenu file = new JMenu("File");
    menubar.add(file);
    JMenuItem exit = new JMenuItem("Exit");
    file.add(exit);

    JMenu orders = new JMenu("Orders");
    menubar.add(orders);
    JMenuItem bookedorders = new JMenuItem("Booked Orders");
    orders.add(bookedorders);
    JMenuItem backorders = new JMenuItem("BackOrders");
    orders.add(backorders);

    JMenu customers = new JMenu("Customers");
    menubar.add(customers);
    JMenuItem customersales = new JMenuItem("Customer Sales");
    customers.add(customersales);
    JMenuItem customeritems = new JMenuItem("Customer Items");
    customers.add(customeritems);
    JMenuItem customerprices = new JMenuItem("Customer Prices");
    customers.add(customerprices);
    JMenuItem customerlistings = new JMenuItem("Customer Listings");
    customers.add(customerlistings);

    JMenu inv = new JMenu("INV");
    menubar.add(inv);
    JMenuItem surplusinv = new JMenuItem("Surplus Inv");
    inv.add(surplusinv);
    JMenuItem stockinv = new JMenuItem("Stock Inv");
    inv.add(stockinv);

    JMenu search = new JMenu("Searh");
    menubar.add(search);
    JMenuItem itemsearch = new JMenuItem("Item Search");
    search.add(itemsearch);
    JMenuItem customersearch = new JMenuItem("Customer Search");
    search.add(customersearch);

    JMenu menulostsales = new JMenu("Lost Sales");
    menubar.add(menulostsales);
    JMenuItem lostsales = new JMenuItem("Lost Sales");
    menulostsales.add(lostsales);


    JMenu menumarginadvisor = new JMenu("Margin Advisor");
    menubar.add(menumarginadvisor);
    JMenuItem marginadvisor = new JMenuItem("Margin Advisor");
    menumarginadvisor.add(marginadvisor);


    JMenu menumakeandhold = new JMenu("Make and Hold");
    menubar.add(menumakeandhold);
    JMenuItem makeandhold = new JMenuItem("Make and Hold");

    menumakeandhold.add(makeandhold);

    makeandhold.addActionListener(
        new ActionListener(){
            public void actionPerformed(ActionEvent e)
            {
                System.out.println("Make and Hold is pressed");
                System.out.println("Hello World");                  
// This is Make and Hold Area

            }
        }
    );          

    class exitaction implements ActionListener {
        public void actionPerformed (ActionEvent e){
        System.exit(0);
        }
    }
        exit.addActionListener(new exitaction());


}

}   
4

6 に答える 6

1

フレームには印刷方法がないため、フレームに印刷することはできません。フレームにテキストを直接追加する場合は、テキストを描画する必要があります。paint以下の手法でメソッドをオーバーライドする必要があります

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class melco extends JFrame{

  String str;
  int x = 100, y = 100;

  public melco(String title){
    super(title);
  }

  void print(String s){
    str = s;
    repaint();
  }

  public void paint(Graphics g){
    super.paint(g);
    if (str != null)
      g.drawString(str, x, y);
  }
  public static void main(String[] args){
    final melco frame = new melco("Salesman Resources");
    frame.setVisible(true);
    frame.setSize(1000,800);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JMenuBar menubar = new JMenuBar();
    frame.setJMenuBar(menubar);

    JMenu file = new JMenu("File");
    menubar.add(file);
    JMenuItem exit = new JMenuItem("Exit");
    file.add(exit);

    JMenu orders = new JMenu("Orders");
    menubar.add(orders);
    JMenuItem bookedorders = new JMenuItem("Booked Orders");
    orders.add(bookedorders);
    JMenuItem backorders = new JMenuItem("BackOrders");
    orders.add(backorders);

    JMenu customers = new JMenu("Customers");
    menubar.add(customers);
    JMenuItem customersales = new JMenuItem("Customer Sales");
    customers.add(customersales);
    JMenuItem customeritems = new JMenuItem("Customer Items");
    customers.add(customeritems);
    JMenuItem customerprices = new JMenuItem("Customer Prices");
    customers.add(customerprices);
    JMenuItem customerlistings = new JMenuItem("Customer Listings");
    customers.add(customerlistings);

    JMenu inv = new JMenu("INV");
    menubar.add(inv);
    JMenuItem surplusinv = new JMenuItem("Surplus Inv");
    inv.add(surplusinv);
    JMenuItem stockinv = new JMenuItem("Stock Inv");
    inv.add(stockinv);

    JMenu search = new JMenu("Searh");
    menubar.add(search);
    JMenuItem itemsearch = new JMenuItem("Item Search");
    search.add(itemsearch);
    JMenuItem customersearch = new JMenuItem("Customer Search");
    search.add(customersearch);

    JMenu menulostsales = new JMenu("Lost Sales");
    menubar.add(menulostsales);
    JMenuItem lostsales = new JMenuItem("Lost Sales");
    menulostsales.add(lostsales);


    JMenu menumarginadvisor = new JMenu("Margin Advisor");
    menubar.add(menumarginadvisor);
    JMenuItem marginadvisor = new JMenuItem("Margin Advisor");
    menumarginadvisor.add(marginadvisor);


    JMenu menumakeandhold = new JMenu("Make and Hold");
    menubar.add(menumakeandhold);
    JMenuItem makeandhold = new JMenuItem("Make and Hold");

    menumakeandhold.add(makeandhold);

    makeandhold.addActionListener(
      new ActionListener(){
        public void actionPerformed(ActionEvent e)
        {
          System.out.println("Make and Hold is pressed");
          frame.print("Make and Hold is pressed");
          System.out.println("Hello World");
          frame.print("Hello World");
// This is Make and Hold Area

        }
      }
    );

    class exitaction implements ActionListener {
      public void actionPerformed (ActionEvent e){
        System.exit(0);
      }
    }
    exit.addActionListener(new exitaction());


  }

}
于 2012-08-17T16:06:06.127 に答える
1
  • EDT (Event Dispatcher Thread) を GUI の処理以外の目的で使用しないでください。main() Java GUI のメソッドは、GUI の構築をイベント ディスパッチャー スレッドにスケジュールした後に終了します。したがって、それを処理するのは EDT です。

例えば:

public static void main(String[] args){

    EventQueue.invokeLater(new Runnable(){

         public void run(){

             myframe.setVisible(true);

           } 
      }
  }
  • TitleJLableなどを追加するには、次のようなものが必要です。

  • に aを追加してJPanelから、JFrameそれにa を追加できJTextFieldます。

于 2012-08-17T15:46:41.023 に答える
1

コンソールに印刷できますが、フレームに印刷できないようです。

どういう意味?

フレームにタイトルを設定したい場合は、setTitle を使用できます。

frame.setTitle("a title");

それ以外の場合、テキストを追加したい場合は、少なくともコンポーネントを JFrame に追加する必要があります。JLabelを見てください:

JLabel label = new JLabel();
frame.getContentPane().add(label);

テキストを変更する必要がある場合:

label.setText("some text");
于 2012-08-17T15:42:44.300 に答える
0

フレームに印刷しません。JTextAreaを追加して、それにデータを追加したいですか?

于 2012-08-17T15:41:26.750 に答える
0

JLabelさて、フレームに表示する何かが必要です。

frame.setLayout(new BorderLayout());
JLabel lblMessage = new JLabel(); // You'll probably need to declare this as final
frame.add(lblMessage);

次に、アクションリスナーで次のようなことができます

public void actionPerformed (ActionEvent e){
    label.setText("This is a message from the menu item");
}
于 2012-08-17T15:42:21.030 に答える
-1

JMenuItemsにMouseListenerを追加してみませんか?最新の「メッセージ」参照をメンバー変数として保持し、別のMouseListenerが起動されたときにそれをJFrameから削除できます。

于 2012-08-17T15:41:28.700 に答える