سؤال

هذا هو الواجب المنزلي. بداية فئة جافا. ما زلت ألتف رأسي حول هذه الأشياء.

المشروع هو إنشاء نظام إدارة المخزون.

لقد اكتشفت كل شيء باستثناء كيفية جعل هذا الزر يغير النص في jtextfield. يحتاج إلى إضافة معلومات من مجموعة من المنتجات (DVD في هذه الحالة). يتحدث الكتاب عن طرق مختلفة لإدارة أشياء مثل الخط والموقف وحالة JTextfield ولكنه لا يغطي التنسيق أو استدعاء طريقة للنص.

فيما يلي مثال على ما أريد القيام به باستخدام jtextarea. هذا هو في الأساس ما أريد أن أفعله مع jtextfields الخاص بي.

   ...
    // setup the interface    

 JPanel panel = new JPanel();
 txt = new JTextArea(15,40);
 txt.setEditable(false);//user shouldn't change it
 panel.add(txt);

 JButton next = new JButton("Next");

 panel.add(next);

 getContentPane().add(panel);

 displayDVD();
 }
 // view software
 public void displayDVD() {
       txt.setText("DVD Details:\n");
    txt.append("Item number: " + inv.get(currentDisplay).getItem() + "\n");
    txt.append("DVD name: " + inv.get(currentDisplay).getName() + "\n");
    txt.append("Units in stock: " + inv.get(currentDisplay).getUnits() + "\n");
    txt.append("Price: $" +                                              
       String.format("%.2f",inv.get(currentDisplay).getPrice()) + "\n");
    txt.append("Total value: $" +                             
       String.format("%.2f",inv.get(currentDisplay).value()) + "\n");
    txt.append("Fee: $" + String.format("%.2f",inv.get(currentDisplay).fee()) + "\n\n");

    txt.append("Total value: $" + String.format("%.2f",inv.value()));
 }

وهنا رمز الخاص بي الفعلي حتى الآن

// GUI with navigation and file manipulation buttons
import javax.swing.*; // provides basic window features
import java.awt.event.*;
import java.awt.GridLayout;
import java.awt.BorderLayout;

public class AppGUI extends JFrame 
{
   private Inventory inv;    
 private int currentDisplay = 0; 

   private JPanel topButtonJPanel;
 private JButton topButtons[]; 

 private JPanel labelJPanel;
 private JLabel labels[]; 

 private JPanel fieldJPanel;
 private JTextField fields[];

   private JPanel buttonJPanel;
 private JButton buttons[]; 

   // LabelFrame constructor adds JLabels to JFrame
   public AppGUI()
   {
      super( "Inventory Program v.5" );
      setLayout( new BorderLayout() ); // set frame layout
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// quit if the window is closed

  // initialize values
  RatedDVD d1 = new RatedDVD(1, "The Invisible Man", 0, 4999.99, "PG");
  RatedDVD d2 = new RatedDVD(2, "The Matrix", 1, 13.01, "PG13");
  RatedDVD d3 = new RatedDVD(3, "Se7en", 7, 11.11, "R");
  RatedDVD d4 = new RatedDVD(4, "Oceans Eleven", 11, 9.02, "PG13");
  RatedDVD d5 = new RatedDVD(5, "Hitch Hikers Guide to the Galaxy", 42, 10.00, "G"); 

  // create inv and enter values
  inv = new Inventory();
  inv.add(d1);
  inv.add(d2);
  inv.add(d3);
  inv.add(d4);
  inv.add(d5);

  inv.sort();

  topButtons = new JButton[ 6 ]; // create topButtons array
  topButtonJPanel = new JPanel(); // set up panel
  topButtonJPanel.setLayout( new GridLayout( 1, topButtons.length, 2, 2 ) );
  topButtons[0] = new JButton( "Load file" );
  topButtons[1] = new JButton( "Add" );
  topButtons[2] = new JButton( "Modify" );
  topButtons[3] = new JButton( "Delete" );
  topButtons[4] = new JButton( "Search" );
  topButtons[5] = new JButton( "Save" );

  for(int count=0;count<topButtons.length;count++){topButtonJPanel.add(topButtons[count]);}
  //add( topButtonJPanel, BorderLayout.NORTH ); // this is for next weeks assignment

  labels = new JLabel[8];
  labelJPanel = new JPanel();
  labelJPanel.setLayout( new GridLayout( labels.length, 1 ));
  labels[0] = new JLabel( "Item ID" );
  labels[1] = new JLabel( "Name" );
  labels[2] = new JLabel( "Rating" );
  labels[3] = new JLabel( "# in Stock" );
  labels[4] = new JLabel( "Price" );
  labels[5] = new JLabel( "Restocking Fee" );//[DEBUG] ref actual Variable
  labels[6] = new JLabel( "Inventory Value with Fee (5%)" );
  labels[7] = new JLabel( "Total Value with Fee(for all items)" );

  for(int count=0;count<labels.length;count++){labelJPanel.add(labels[count]);}
  add( labelJPanel, BorderLayout.WEST );

  fields = new JTextField[8];
  fieldJPanel = new JPanel();
  int spaces = 28;
  fieldJPanel.setLayout( new GridLayout( labels.length, 1 ));
  fields[0] = new JTextField( "", spaces );
  fields[1] = new JTextField( "", spaces );
  fields[2] = new JTextField( "", spaces );
  fields[3] = new JTextField( "", spaces );
  fields[4] = new JTextField( "", spaces );
  fields[5] = new JTextField( "", spaces );
  fields[6] = new JTextField( "", spaces );
  fields[7] = new JTextField( "", spaces );

  for(int count=0;count<fields.length;count++)
  {
   fields[count].setEditable( false );
   fieldJPanel.add(fields[count]);
  }
  add( fieldJPanel, BorderLayout.EAST );

  buttons = new JButton[ 5 ]; // create buttons array
  buttonJPanel = new JPanel(); // set up panel
  buttonJPanel.setLayout( new GridLayout( 1, buttons.length, 2, 2 ) );
  buttons[0] = new JButton( "First" ); 
  buttons[0].addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
    if (currentDisplay != 0)currentDisplay = 0; //advance to the end
    }
   });
  buttons[1] = new JButton( "Prev" );
  buttons[1].addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
    if (currentDisplay != 0)currentDisplay--; //advance to the end
     else currentDisplay = (inv.size()-1); 
    }
   });
  Icon bug1 = new ImageIcon( getClass().getResource( "bug1.gif" ) );
  buttons[2] = new JButton( bug1 );
  buttons[3] = new JButton( "Next" );
  buttons[3].addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
    if (currentDisplay < inv.size()-1)currentDisplay++; //advance to the end
     else currentDisplay = 0;    stkover
   }}); 
  buttons[4] = new JButton( "Last" );
  buttons[4].addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
    if (currentDisplay != inv.size()-1)currentDisplay = inv.size()-1; //advance to the end
     else currentDisplay = (inv.size()-1); 
    }
   });

  for(int count=0;count<buttons.length;count++){buttonJPanel.add(buttons[count]);}
  add( buttonJPanel, BorderLayout.SOUTH );
 }// end method

}// end class AppGUI

أي تلميحات نصائح أو دفعات موضع تقدير. لا تفعل كل شيء بالنسبة لي رغم من فضلك.

هل كانت مفيدة؟

المحلول

يمكنك إضافة مستمع إجراء إلى الزر (بحيث يستمع إلى إجراء الزر (انقر)). ثم برنامج هذا الإجراء لتغيير قيمة textfield.

final JButton    aButton    = ...;
final JTextField aTextField = ...;
final String     aNewText   = "New TextField Value";

aButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        aTextField.setText(aNewText);
    }
});

لاحظ أن المتغيرات التي يتم الوصول إليها في "Actionperformed" يجب أن تكون نهائية (باستثناء الحقول).

أتمنى أن يساعدك هذا.

نصائح أخرى

للحصول على مرجع متقاطع مثل "زر بلدي يغير مربعتي testbox" ، فإن الفكرة هي إعطاء الزر (وحدة التحكم ، الرمز الذي سيتم تنشيطه عند النقر عليه) مرجع إلى مربع النص. لذلك عند الضغط على الزر ، يمكنه تغيير مربع النص.

إنها العديد من التحسينات الممكنة ، ولكن هذه هي الفكرة الأساسية.

أعتقد أنني لا أفهم السؤال.

أنت تعرف كيفية إضافة أجزاء متعددة من النص إلى مكون واحد.

txt.append("Item number: " + inv.get(currentDisplay).getItem() + "\n"); 
txt.append("DVD name: " + inv.get(currentDisplay).getName() + "\n");

فلماذا يصعب إضافة قطعة واحدة من النص إلى مكونات متعددة؟

itemTextField.setText( inv.get(currentDisplay).getItem() );
nameTextField.setText( inv.get(currentDisplay).getName() );
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top