Выполнен поиск, и я действительно не нашел подходящего ответа с этой хитрой проблемой.
А вот и я, ребята. Заранее спасибо за помощь.
Я пытаюсь вызвать JPanel внутри кнопки JPanel с помощью actionlistener;
хотя с первой добавленной кнопкой она работала нормально, для двух других она не работает;
разница между jpanels, вызываемым в первой кнопке, и остальными двумя заключается в том, что
первая кнопка вызывает другую Jpanel из текущей Jpanel; но два других зовут
две частные классы jpanel в пределах существующих панелей jpanel.
Что я делаю: я пытаюсь отобразить две разные диаграммы в пределах одной Jpanel, используя
две кнопки, взаимозаменяемо; частные jpanels используются исключительно для рисования диаграмм; Я думал, что мне нужно только вызывать эти две jpanels разными кнопками, не создавая совершенно новую JPanel для
содержите каждую jpanel, чтобы нарисовать диаграмму, а затем назовите их так, как я называю другую jpanel в первой кнопке.
прошу прощения за мою неуклюжую формулировку .. вот коды.
открытый класс ExamPerf расширяет JPanel {
final JPanel viewPerf = TabbedQuiz.viewPerfPanel;
final ChartsPanel CP = new ChartsPanel ();
// Я создаю jpanel в его конструкторе; все кнопки здесь;
public ExamPerf() {
setBackground(Color.BLACK);
setBounds(0, 0, 728, 380);
setLayout(null);
setBorder(BorderFactory.createLineBorder(Color.ORANGE, 10));
setBorder(BorderFactory.createTitledBorder(
BorderFactory.createLineBorder(Color.ORANGE),
"Exam Performance", 0, 0, new Font("Tahoma", Font.BOLD, 15),
Color.WHITE));
DrawCurrent drawarea=new DrawCurrent();
add(drawarea);
// это первая кнопка, вызывающая другой Jpanel, совершенно другой класс;
JButton backBut = new JButton("Main Menu");
backBut.setFont(new Font("Tahoma", Font.BOLD, 11));
backBut.setBounds(10, 24, 93, 23);
add(backBut);
backBut.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
setVisible(false);
invalidate();
viewPerf.add(CP);
}
});
// это вторая кнопка, я пытаюсь вызвать закрытый класс DrawCurrent;
// но это не работает; моя мысль была,
JButton histoPerf = new JButton("Historical Performance");
histoPerf.setFont(new Font("Tahoma", Font.BOLD, 11));
histoPerf.setBounds(122, 24, 161, 23);
add(histoPerf);
histoPerf.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
setVisible(false);
invalidate();
DrawCurrent drawplace=new DrawCurrent();
add(drawplace, BorderLayout.CENTER);
}
});
// это третья кнопка, та же проблема.
JButton currentPerf = new JButton("Current Performance");
currentPerf.setFont(new Font("Tahoma", Font.BOLD, 11));
currentPerf.setBounds(303, 24, 151, 23);
add(currentPerf);
currentPerf.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
setVisible(true);
invalidate();
DrawHistorical drawHis=new DrawHistorical();
add(drawHis);
}
});
}
// это первый закрытый класс, DrawCurrent;
открытый класс DrawCurrent расширяет JPanel {
public DrawCurrent() {
setBackground(Color.BLACK);
setForeground(null);
setBounds(10, 49, 708, 320);
setBorder(BorderFactory.createLineBorder(Color.ORANGE, 10));
setBorder(BorderFactory.createTitledBorder(
BorderFactory.createLineBorder(Color.ORANGE), "Chart", 0,
0, new Font("Tahoma", Font.BOLD, 15), Color.WHITE));
setLayout(null);
}
@Override
public void paintComponent(Graphics g) {
final Graphics2D canvas = (Graphics2D) g;
final BasicStroke Pen = new BasicStroke(4, BasicStroke.CAP_ROUND,
BasicStroke.JOIN_ROUND);
canvas.setStroke(Pen);
canvas.setColor(Color.LIGHT_GRAY);
canvas.drawLine(5, 315, 703, 315);
canvas.drawLine(getWidth() / 2, 700, getWidth() / 2, 19);
// write the names of columns on top of them;
canvas.setFont(new Font("Times New Roman", Font.BOLD, 13));
canvas.drawString("Right", 50, 100);
canvas.drawString("Wrong", getWidth() / 2 + 150, 300);
// draw two 3D rectangles as the columns of the performances;
//
canvas.fill3DRect(50, 100, 40, 215, true);
canvas.fill3DRect(getWidth() / 2 + 150, 300, 40, 15, true);
}
}
// это второй закрытый класс, DrawHistorical;
закрытый класс DrawHistorical расширяет JPanel {
final ArrayList<Integer> examCount=new ArrayList<>();
final int leftEdge=10;
public DrawHistorical() {
setBackground(Color.BLACK);
setForeground(null);
setBounds(leftEdge, 49, 708, 320);
setBorder(BorderFactory.createLineBorder(Color.ORANGE, 10));
setBorder(BorderFactory.createTitledBorder(
BorderFactory.createLineBorder(Color.ORANGE), "Chart", 0,
0, new Font("Tahoma", Font.BOLD, 15), Color.WHITE));
setLayout(null);
}
@Override
public void paintComponent(Graphics g) {
final Graphics2D canvas = (Graphics2D) g;
final BasicStroke Pen = new BasicStroke(2, BasicStroke.CAP_ROUND,
BasicStroke.JOIN_ROUND);
canvas.setStroke(Pen);
canvas.setColor(Color.LIGHT_GRAY);
canvas.setFont(new Font("Times New Roman", Font.BOLD, 13));
//this loop is to draw the graph of the historical performance of completed exams.
for(int i=0; i<examCount.size();i=i+3){
// write the number of exam on top of the lien graph.
canvas.drawString("Ex"+examCount.get(i).toString(), leftEdge+i, examCount.get(i));
// draw the line graph and extends as long as the number of completed exams increases.
canvas.drawLine(leftEdge+2+i, examCount.get(i), leftEdge+3+i, examCount.get(i+1));
}
}
}
Большое спасибо, ребята, ничего непонятного, пожалуйста, бросьте их мне.