2016-11-28 5 views
-1

EDIT: Обновлен код, но он просто перезаписывает drawString каждый раз.Как заставить строки появляться в списке?

Я не могу получить входные данные от drawString, чтобы отображать 15px ниже каждый раз, когда вы что-то говорите в текстовом поле. Как я могу получить все строки, которые вы вводите, чтобы отображаться под eatchother?

Заранее спасибо (Im новые для JAVA) ..

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

public class paneel extends JPanel { 
private static final long serialVersionUID = 1L; 
private JTextField invoer; 
private JButton knop; 
//private String item1; 
private item item; 
int y = 50; 

public paneel() { 
    setLayout(null); 

    item = new item(); 
    //item1 = ""; 
    item.setItem(""); 

    invoer = new JTextField(10); 
    invoer.setBounds(50, 25, 150, 20); 

    knop = new JButton("Voeg toe"); 
    knop.addActionListener(new invoerVakHandler()); 
    knop.setBounds(225, 25, 125, 20); 

    add(invoer);  add(knop); 
} 

class invoerVakHandler implements ActionListener { 
    public void actionPerformed (ActionEvent e) { 
     String item1 = invoer.getText(); 

     invoer.setText(""); 

     item.setItem(item1); 

     repaint(); 
    } 
} 

public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    Font font = new Font("Verdana", Font.BOLD, 15); 
    g.setFont(font); 

    y += 35; 

    g.setColor(Color.BLACK); 
    g.drawRect(50, 75, 300, 400); 

    g.drawString(String.format("- %s", item.getItem()), 100, y); 
} 
} 
+0

Потому что ваш 'y' является локальной переменной,' у - = 15' довольно странно, вы, вероятно, нужна переменная экземпляра для 'y', для получения дополнительной информации см следующим образом: https: //www.cs.umd .edu/~ clin/MoreJava/Objects/local.html (например) –

+0

Можете ли вы опубликовать тестовый пример? –

+1

* «Как заставить строки появляться в списке?» * Используйте 'JList' с [' DefaultListModel'] (http://docs.oracle.com/javase/8/docs/api/javax/swing/ DefaultListModel.html). Отобразите список в 'JScrollPane' в' JPanel' с подходящим макетом/ограничением. При добавлении новой строки 'String' вызовите' DefaultListModel.addElement (Object) '. Легко, и намного более прочная, чем обычная роспись. Как и в стороне: Для лучшей помощи рано, опубликовать [MCVE] или [Short, самодостаточный, Правильный пример] (http://www.sscce.org/). @FastSnail * "testable example" * обратите внимание, что '[mcve]' в комментарии автоматически расширяется до [mcve]. –

ответ

1

В вашем методе paintComponent(Graphics g) вы используете локальную переменную вместо переменной экземпляра класса для y. С вашей текущей реализацией каждый раз вызывается paintComponent, создается новая локальная переменная y (и удаляется один раз paintComponent), причем каждый раз, когда переменная установлена ​​в 120, затем нарисована на 135 пикселей для каждой строки.

Вам нужно изменить y на переменную экземпляра, чтобы переменная оставалась в памяти.

Просто под public class paneel {, добавьте свое определение y, поэтому оно доступно для каждого метода в пределах экземпляра paneel.

Так сниппет пример кода может быть:

public class paneel { 
    int y = 120; 
... 
... 

public void paintComponent(Graphics g) { 
    super.paintComponent(g); 

    //adding 15 to the instance of y. 
    //Since y is defined as a class member, and not a local variable, the update to y will remain in memory. 
    y += 15; 

    g.setColor(Color.BLACK); 
    g.drawRect(50, 75, 300, 400); 

    g.drawString(String.format("- %s", item.getItem()), 100, y); 
} 
0

Как я могу получить все строки, которые вы вводите, чтобы показать под eatchother?

Вам нужно перекрасить все в String сек каждый раз, когда метод paintComponent(...) вызывается.

Значит, вам нужно сохранить ArrayList всех строк, которые вы хотите нарисовать. Затем в методе paintComponent (...) вы выполняете итерацию по списку и рисуете каждую строку, увеличивая смещение y на каждой итерации.

Отъезд Custom Painting Approaches. Пример DrawOnComponent содержит рабочий пример этого подхода. В этом примере краска Rectangles, но концепция для String одинакова.