2016-06-18 2 views
0

Ich mache ein "Check-Writer" -Applet für Hausaufgaben und ich versuche, den Namen des Benutzers auf der UI überall angezeigt werden. Ich habe ein paar Dinge ausprobiert, aber jetzt versuche ich nur, die Eingabe auf ein JLabel und dann auf ein Panel zu bekommen.versuchen, JTextField-Eingabe auf ein JLabel dann zu JPanel GUI-Applet

public class project2 extends JPanel { 

private JLabel labelName, labelAmount, resultName, resultMoney; 
//private JTextArea resultName, resultMoney; 
private JTextField name, dollarAmount; 
private final int w = 1000, h = 200; 

protected void paintComponent(Graphics g) { 
g.drawString("Bank of Northwest Vista College", 425, 40); 
g.drawString("Pay to the order of: ", 75, 70); 
g.drawString("$", 730, 70); 
} 
public project2() { 
    setBackground(Color.white); 
    setPreferredSize(new Dimension(w, h)); 

    labelName = new JLabel("Name:"); 
    labelAmount = new JLabel("Check Amount:"); 
    resultName = new JLabel(""); 
    //resultMoney = new JLabel("$" + dollarAmount); 

    name = new JTextField(20); 
    name.addActionListener(new nameListener()); 

    dollarAmount = new JTextField(20); 
    dollarAmount.addActionListener(new dollarListener()); 

    add(labelName); 
    add(name); 
    add(labelAmount); 
    add(dollarAmount); 
    add(resultName); 
    //add(resultMoney); 
} 

, wo ich im Grunde die meiste Hilfe

private class nameListener implements ActionListener { 
    public void actionPerformed(ActionEvent event) { 
     JLabel namelabel = new JLabel(name.getText()); 
     JPanel namepanel = new JPanel(); 
     namepanel.setPreferredSize(new Dimension(40, 10)); 
     namepanel.add(name); 
    } 
} 

private class dollarListener implements ActionListener { 
    public void actionPerformed(ActionEvent event) { 
     String MONEY = dollarAmount.getText(); 
    } 
} 

}

Antwort

1

Probleme müssen:

  • Sie scheinen eine Kombination von Schreiben direkt an die Komponente innerhalb seiner paintcomponent zu tun Methode, sowie versuchen, Text mit einem JLabel anzuzeigen, und diese Methoden zu kombinieren. Das ist nicht der sauberste Weg, dies zu lösen. Normalerweise ist es besser, alle Komponenten oder alle Grafiken zu verwenden, anstatt zu mischen, wenn Sie eine einheitliche Nachricht anzeigen möchten.
  • Sie versuchen, ein JLabel mit absoluter Positionierung auf einem JPanel zu platzieren, ohne den Layout-Manager von JPanel zu verwenden. JPanels verwenden FlowLayout als Standard-Layout-Manager, und dieses Layout ignoriert Komponentengrößen und -grenzen wie die meisten Swing-Layout-Manager.
  • Sie überschreiben die paintComponent eines JPanels, rufen aber nicht die Methode des Super-Operators auf.
  • Im ActionListener erstellen Sie neue Komponenten, indem Sie dem neuen JPanel das neue JLabel hinzufügen, aber das JPanel nicht zur GUI hinzufügen. Unabhängig davon möchten Sie hier nicht wirklich neue Komponenten erstellen, wie unten erklärt.

Vorschläge:

  • Wieder entweder Ihren Text entweder in Swing-Komponenten wie JLabels anzuzeigen, oder von innerhalb der paintcomponent-Methode, aber nicht beide zusammen, nicht, wenn Sie zwei völlig verschiedene Dinge sind angezeigt werden, die sollen sich nicht anstellen.
  • Wenn Sie paintComponent überschreiben, rufen Sie die Methode super.paintComponent(g); auf, normalerweise als erster Aufruf innerhalb Ihrer Überschreibungsmethode. Dies stellt sicher, dass schmutzige Pixel bereinigt werden und dass die Graphikorganisation anderer Komponenten durchgeführt wird.
  • Vermeiden Sie die Verwendung von Null-Layouts und setBounds, sondern verwenden Sie Layout-Manager und lassen Sie die Layout-Manager ihre Sache tun, um Ihnen die Erstellung Ihrer GUI zu erleichtern.
  • Fügen Sie kein neues JLabel aus dem ActionListener hinzu, sondern fügen Sie Text zu einem bereits vorhandenen und angezeigten JLabel hinzu.

Zum Beispiel:

import java.awt.BorderLayout; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.KeyEvent; 
import javax.swing.*; 

public class SimpleExampleWithComponents extends JPanel { 
    private static final int COLS = 15; 
    private JTextField nameField = new JTextField(COLS); 
    private JTextField amountField = new JTextField(COLS); 
    private JButton submitButton = new JButton("Submit"); 

    private JLabel payeeLabel = new JLabel("   "); 
    private JLabel amountLabel = new JLabel("$   "); 

    public SimpleExampleWithComponents() { 
     SubmitListener submitListener = new SubmitListener(); 
     nameField.addActionListener(submitListener); 
     amountField.addActionListener(submitListener); 
     submitButton.addActionListener(submitListener); 
     submitButton.setMnemonic(KeyEvent.VK_S); 

     JPanel topPanel = new JPanel(); 
     topPanel.add(new JLabel("Name:")); 
     topPanel.add(nameField); 
     topPanel.add(Box.createHorizontalStrut(15)); 
     topPanel.add(new JLabel("Amount:")); 
     topPanel.add(amountField); 
     topPanel.add(Box.createHorizontalStrut(15)); 
     topPanel.add(submitButton); 

     // holds one row and 3 columns 
     JPanel middlePanel = new JPanel(new GridLayout(1, 3)); 
     middlePanel.add(new JLabel("Pay to the order of:")); 
     middlePanel.add(payeeLabel); 
     middlePanel.add(Box.createHorizontalStrut(15)); 
     middlePanel.add(amountLabel); 

     setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); 
     setLayout(new BorderLayout()); 
     add(topPanel, BorderLayout.PAGE_START); 
     add(middlePanel, BorderLayout.CENTER); 
    } 

    private class SubmitListener implements ActionListener { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      String name = nameField.getText().trim(); 
      String amount = amountField.getText().trim(); 

      payeeLabel.setText(name); 
      amountLabel.setText("$" + amount); 
     } 
    } 

    private static void createAndShowGui() { 
     SimpleExampleWithComponents mainPanel = new SimpleExampleWithComponents(); 

     JFrame frame = new JFrame("GUI"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(() -> createAndShowGui()); 
    } 
} 
+0

Wow, vielen Dank. Ich merkte, dass mein Code ziemlich unordentlich war, nachdem ich das gepostet hatte, ich versuchte eine ganze Reihe von Dingen und wurde wirklich unorganisiert. – akira

+0

@akira: Sie möchten immer nur eine Sache auf einmal reparieren, oft isoliert in ihrem eigenen kleinen Programm. –