#java
Вопрос:
У меня есть четыре класса, основной класс, класс «MyFrame», класс «MyButton» и класс MySecondFrame. В методе класса MyButton я хочу установить видимость второго кадра, созданного в основном классе, на значение true, а видимость первого кадра-на значение false (также созданного в основном классе). Теперь у меня проблема в том, что я не могу вызвать кадры to, чтобы установить их видимость в значение true или false. Как я могу это решить? (это ошибка «не удается разрешить символ») Вот код:
package com.company;
public class Main {
public static void main(String[] args) {
MyFrame firstFrame = new MyFrame();
MyButton firstButton = new MyButton();
//MyTextField firstTextField = new MyTextField();
MySecondFrame secondFrame = new MySecondFrame();
MyLabel firstLabel = new MyLabel();
firstFrame.add(firstButton);
//secondFrame.add(firstTextField);
//secondFrame.add(firstLabel);
}
}
package com.company;
import javax.swing.*;
import java.awt.*;
public class MyFrame extends JFrame{
MyFrame(){
this.getContentPane().setBackground(new Color(0xD3D3D3));
this.setSize(500, 700);
this.setLocation(870,15);
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
this.setTitle("Converter");
this.setLayout(null);
}
}
package com.company;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class MyButton extends JButton implements ActionListener{
MyButton(){
this.setBounds(150, 100, 200, 50);
this.setText("Convert Currencies");
this.setFocusable(false);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==this){
firstFrame.setVisible(false);
secondFrame.setVisible(true);
}
}
package com.company;
import javax.swing.*;
import java.awt.*;
public class MySecondFrame extends JFrame {
MySecondFrame(){
this.getContentPane().setBackground(new Color(0xD3D3D3));
this.setSize(500, 700);
this.setLocation(870,15);
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
this.setTitle("Converter");
this.setLayout(null);
}
}
Ответ №1:
Вы можете добиться того, чего хотите, передавая интерфейс из основного класса в класс MyButton.
Во-первых, вы определяете интерфейс
interface ButtonListener{
void onClick();
}
Во-вторых, измените конструктор MyButton
public class MyButton extends JButton implements ActionListener{
private ButtonListener buttonListener;
MyButton(ButtonListener buttonListener){
this.buttonListener = buttonListener;
this.setBounds(150, 100, 200, 50);
this.setText("Convert Currencies");
this.setFocusable(false);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==this){
buttonListener.onClick();
}
}
Наконец, передайте этот интерфейс своему классу MyButton
public class Main implements ButtonListener {
MyFrame firstFrame;
MySecondFrame secondFrame;
public Main(){
firstFrame = new MyFrame();
secondFrame = new MySecondFrame();
MyButton firstButton = new MyButton(this);
//MyTextField firstTextField = new MyTextField();
MyLabel firstLabel = new MyLabel();
firstFrame.add(firstButton);
//secondFrame.add(firstTextField);
//secondFrame.add(firstLabel);
}
public static void main(String[] args) {
Main main = Main();
}
@Override
public void onClick() {
//here, your button event triggered
//do what you want
firstFrame.setVisible(false);
secondFrame.setVisible(true);
}
}
Комментарии:
1. Спасибо за ответ, но он все равно не работает.
2. на «com.company.Main.this» нельзя ссылаться из статического контекста
3. «onClick()» в «com.company. Основные» столкновения с «onClick()» в «com.company. Список кнопок»; попытка назначить более слабые права доступа («пакет-частный»); был «публичным»
4. Что означают первые две ошибки и почему он все еще не может разрешить символы первого кадра и второго кадра?
5. Я обновил, поместил «public» в @Переопределить public void onClick() {