Я новичок в программировании на Java и имею «начальный вопрос». Я уже пытался найти, кто-то уже имел ту же проблему, но я не мог найти никаких сообщений, которые были на моем низком уровне.JButton доступен для нескольких панелей
Моя проблема: У меня есть 2 JPanels в одном из них (назовем это Panel1) Я реализую JTextField (поле1) и JButton (button1). на Panel2 Я хочу что-то нарисовать, в зависимости от того, что использует наконечник в первом JTextField.
Моя проблема в том, что Panel2 должен «видеть» эту кнопку1 (в Panel1), чего мне не удается.
Может ли кто-нибудь дать мне подсказку, видео на Youtube или что-то в этом роде, где я могу увидеть хороший пример, где кто-то справляется с такой проблемой?
Приветствия Ventura
PS У меня была идея, чтобы передать значения в panel2, где он должен рисовать те вещи, которые я хочу, вот мой код до сих пор (я надеюсь, что я его правильно): Вот ПАНЕЛЬ1:
public class Panel1 extends JPanel
{
public JButton button = new JButton("OK");
public JTextField field1 = new JTextField(5);
public String name;int b;
public Panel1()
{
setBackground(Color.WHITE);
add(field1);
add(button);
ButtonListener listener = new ButtonListener(field1);
button.addActionListener(listener);
}
public Dimension getPreferredSize()
{
return new Dimension(400,400);
}
}
Здесь ButtonListener:
class ButtonListener implements ActionListener
{
Graphics g;
//Graphics2D g2 = (Graphics2D) g;
public Panel2 pan2 = new Panel2();
public String name;
public JTextField field1 = new JTextField();
int b;
public ButtonListener(JTextField field1)
{this.field1 = field1;}
public void actionPerformed(ActionEvent e)
{
String op = e.getActionCommand();
if(op.equals("OK"))
{
name = field1.getText();
try
{
b = Integer.parseInt(name);
JOptionPane.showMessageDialog(null,"Ihre Zahl = "+b);
pan2.setvalue(b,g);
}
catch(NumberFormatException ex) {JOptionPane.showMessageDialog(null,"Please enter real numbers!");}
}
}
}
и наконец panel2, где я хотел бы обратить вещи на основе ввода заданного в Panel1 (например: I типа в 10, и он рисует меня Rect угол с шириной 10 или что-то в этом роде)
public class Panel2 extends JPanel
{
Graphics g;
Graphics2D g2 = (Graphics2D) g;
public int b;
public Panel2()
{
setBackground(Color.YELLOW);
}
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
super.paintComponent(g);
g2.setColor(Color.RED);
g2.fillRect(200, 200, 50, 50);
Paint2(g);
}
public void Paint2(Graphics g)
{
this.g = g;
Graphics2D g2 = (Graphics2D) g;
//super.paintComponent(g);
System.out.println("TEST2");
g2.setColor(Color.BLUE);
//System.out.println("TEST3");
g2.fillRect(10 , 10, 40, 40);
}
public void setvalue(int b, Graphics g)
{
this.b = b;
this.g = g;
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.CYAN);
g2.fillRect(0, 0, 40, 40);
System.out.println("B ist gleich = "+b);
//Paint2(g2);
}
public Dimension getPreferredSize()
{
return new Dimension(400,400);
}
Прошу прощения, если это немного громоздко читать. Моя основная проблема я получаю в этом коде является NullPointerException в panel2, когда я хочу, чтобы вызвать метод
SetValue (интермедиат б, графика г) g2.setColor (Color.Cyan)
Приветствие Patrick
Здравствуйте, большое спасибо за ваш ответ. Я применил ваши подсказки, и я разместил код, чтобы четко указать, где моя проблема. (Основной метод, который я не размещаю, чтобы он четко размещался. – Ventura
Если бы это помогло, вы бы не упустили его и не проверили? – Eames
Hi Большое спасибо за вашу помощь, это очень полезно :), но есть одна мелочь, которую я до сих пор не получаю; вероятно, вы можете мне помочь: я хотел бы, чтобы код «перекрашивал» вещи; как вы можете видеть в Panel2 в методе setValue, он говорит g2.fillRect (...), но на самом деле он не рисует Rectangle в Panel1, когда я что-то опрокидываю. Есть ли способ исправить это? – Ventura