내 코드에서 MVC 패턴을 따르려고했는데 내 뷰의 패널 안에 Jbutton이있는 JTabbedPane이있는 시스템을 만들고있었습니다. 모델의 내용 정보, 내 컨트롤러에있는 액션 리스너. 내가 겪어 본 문제는 내가 Jbutton에 actionlistener를 넣으려고했지만 마지막 탭에서만 작동하는 것 같다. (4 개의 탭이 있고 jbutton이있는 4 번째 탭만 사용한다고 가정 해 보겠습니다.) 오, 나는 Jbutton 배열을 사용하고 있다고 말해야합니다. 하나의 Jbutton 배열 만 사용하여 패널에 배치했습니다. 어떻게하면 되나요? 참조 용 샘플 코드가 필요합니다. 여기 JTabbedPane의 Java MVC 패턴
내 샘플보기 클래스 여기import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
public class View extends JFrame
{
private static final int HEIGHT = 700;
private static final int WIDTH = 700;
private JTabbedPane tabPane = new JTabbedPane();
private JComponent tab1 = makePanel("1");
private JComponent tab2 = makePanel("2");
private JComponent tab3 = makePanel("3");
private JComponent tab4 = makePanel("4");
private JButton[] button;
private String[] buttonlabel;
public View()
{
setLayout(null);
setSize(WIDTH, HEIGHT);
setLocationRelativeTo(null);
setResizable(false);
setVisible(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
tabPane.addTab("firstTab", tab1);
tabPane.addTab("secondTab", tab2);
tabPane.addTab("thirdTab", tab3);
tabPane.addTab("fourtTab", tab4);
add(tabPane);
tabPane.setBounds(20, 20, 400, 400);
}
protected JComponent makePanel(String input)
{
JPanel panel = new JPanel(false);
panel.setLayout(null);
if(input == "1")
{
button = new JButton[4];
buttonlabel = new String[]
{
"1button1",
"2button1",
"3button1",
"4button1"
};
for(int x = 0; x < 4; x++)
{
button[x] = new JButton(buttonlabel[x]);
panel.add(button[x]);
}
int yCord = 20;
for(int x = 0; x < 4; x += 2)
{
int xCord = 20;
for(int y = x; y < (x + 2); y++)
{
button[y].setBounds(xCord, yCord, 100, 100);
xCord += 120;
}
yCord += 120;
}
}
else if(input == "2")
{
button = new JButton[4];
buttonlabel = new String[]
{
"1button2",
"2button2",
"3button2",
"4button2"
};
for(int x = 0; x < 4; x++)
{
button[x] = new JButton(buttonlabel[x]);
panel.add(button[x]);
}
int yCord = 20;
for(int x = 0; x < 4; x += 2)
{
int xCord = 20;
for(int y = x; y < (x + 2) && y < 5; y++)
{
button[y].setBounds(xCord, yCord, 100, 100);
xCord += 120;
}
yCord += 120;
}
}
else if(input == "3")
{
button = new JButton[4];
buttonlabel = new String[]
{
"1button3",
"2button3",
"3button3",
"4button3"
};
for(int x = 0; x < 4; x++)
{
button[x] = new JButton(buttonlabel[x]);
panel.add(button[x]);
}
int yCord = 20;
for(int x = 0; x < 4; x += 2)
{
int xCord = 20;
for(int y = x; y < (x + 2) && y < 5; y++)
{
button[y].setBounds(xCord, yCord, 100, 100);
xCord += 120;
}
yCord += 120;
}
}
else if(input == "4")
{
button = new JButton[4];
buttonlabel = new String[]
{
"1button4",
"2button4",
"3button4",
"4button4"
};
for(int x = 0; x < 4; x++)
{
button[x] = new JButton(buttonlabel[x]);
panel.add(button[x]);
}
int yCord = 20;
for(int x = 0; x < 4; x += 2)
{
int xCord = 20;
for(int y = x; y < (x + 2) && y < 5; y++)
{
button[y].setBounds(xCord, yCord, 100, 100);
xCord += 120;
}
yCord += 120;
}
}
return panel;
}
public void buttonListener(ActionListener buttonL)
{
for(int x = 0; x < button.length; x++)
{
button[x].addActionListener(buttonL);
}
}
public static void main(String args[])
{
View view = new View();
Controller control = new Controller(view);
view.setVisible(true);
}
}
당신이 그렇게에 JTabbedPane에 각각의 생성과 버튼 배열을 다시 작성하고있는
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Controller
{
View view = new View();
public Controller(View view)
{
this.view = view;
this.view.buttonListener(new ButtonListener());
}
private class ButtonListener implements ActionListener
{
public void actionPerformed(ActionEvent ae)
{
System.out.println("BUTTON WORKS!");
}
}
}
본질적으로 "귀하에게 보여주지 않는 코드가 왜 작동하지 않는지 추측 해주십시오"라는 이유로 귀하의 질문은 서면으로 답변하는 것이 어렵지 않을지라도 어려울 것입니다. 컴파일하고 실행하며 코드 형식의 텍스트로 질문에 게시 할 수있을만큼 작고 문제점을 나타내는 [mcve] 작은 새 프로그램을 만들어이 기능을 개선하십시오. –
샘플 클래스를 생성하는 중 일찍 코드를 게시하지 않으신 것에 대해 사과드립니다. 내 질문을 편집하고 샘플 코드를 게시했습니다. –
코드를 게시 해 주셔서 감사 드리며 잠시 후에 살펴 보겠습니다. 그러나 즉시 명백한 문제가 있습니다 : 'else if (input == "2")'. '=='또는'! ='를 사용하여 문자열을 비교하지 마십시오. 대신 'equals (...)'또는 'equalsIgnoreCase (...)'메소드를 사용하십시오. 이해 '=='두 * 객체 참조 *가 당신이 관심이없는 것과 같은지 확인합니다. 다른 방법은 두 문자열이 같은 순서로 같은 문자를 가지고 있는지 확인합니다. 여기에 문제가 있습니다. –