Я пытаюсь создать графический интерфейс с JTabbedPane и показывать соединения между радиостанциями в радиочастотной сети. Я не могу понять, как сделать tabbedPanes динамически создаваться. Я пробовал много вещей без успеха. Вот что я до сих пор.Динамически создавать JPanels
Это ничья класс
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
public class draw extends JPanel implements MouseListener{
private Color currentColor = Color.RED;
//Array to hold the grid dimensions used for drawing radio[]
private int[] gD = {40, 100, 160, 220, 280, 340, 400, 460};
//Flag for changing colors in the grid
private boolean colorChanged = false;
public void drawing() {
repaint();
}
public void paintComponent(final Graphics g) {
super.paintComponent(g);
final Graphics2D g2d = (Graphics2D)g;
//Smooth Graphics
((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
//Quality Color Rendering
((Graphics2D) g).setRenderingHint(RenderingHints.KEY_COLOR_RENDERING,
RenderingHints.VALUE_COLOR_RENDER_QUALITY);
//Array to hold 40 radios
final Ellipse2D.Double radio[] = new Ellipse2D.Double[39];
//Array to hold lines that show radio connections
final Line2D connection[] = new Line2D[49];
/****************************************************************
This section of code draws the Ellipses that represent the
different radios.
*****************************************************************/
radio[0] = new Ellipse2D.Double(gD[2], gD[0], gD[0], gD[0]);
g2d.setPaint(currentColor);
g2d.fill(radio[0]);
this.addMouseListener(this);
radio[1] = new Ellipse2D.Double(gD[1], gD[1], gD[0], gD[0]);
g2d.setPaint(currentColor);
g2d.fill(radio[1]);
this.addMouseListener(this);
radio[2] = new Ellipse2D.Double(gD[0], gD[2], gD[0], gD[0]);
g2d.setPaint(currentColor);
g2d.fill(radio[2]);
this.addMouseListener(this);
radio[3] = new Ellipse2D.Double(gD[1], gD[3], gD[0], gD[0]);
g2d.setPaint(currentColor);
g2d.fill(radio[3]);
this.addMouseListener(this);
radio[4] = new Ellipse2D.Double(gD[2], gD[4], gD[0], gD[0]);
g2d.setPaint(currentColor);
g2d.fill(radio[4]);
this.addMouseListener(this);
radio[5] = new Ellipse2D.Double(gD[5], gD[0], gD[0], gD[0]);
g2d.setPaint(currentColor);
g2d.fill(radio[5]);
this.addMouseListener(this);
radio[6] = new Ellipse2D.Double(gD[6], gD[1], gD[0], gD[0]);
g2d.setPaint(currentColor);
g2d.fill(radio[6]);
this.addMouseListener(this);
radio[7] = new Ellipse2D.Double(gD[7], gD[2], gD[0], gD[0]);
g2d.setPaint(currentColor);
g2d.fill(radio[7]);
this.addMouseListener(this);
radio[8] = new Ellipse2D.Double(gD[6], gD[3], gD[0], gD[0]);
g2d.setPaint(currentColor);
g2d.fill(radio[8]);
this.addMouseListener(this);
radio[9] = new Ellipse2D.Double(gD[5], gD[4], gD[0], gD[0]);
g2d.setPaint(currentColor);
g2d.fill(radio[9]);
this.addMouseListener(this);
/****************************************************************
This section of code draws the lines that represent the
connections to the different radios.
*****************************************************************/
connection[0] = new Line2D.Double(radio[0].getCenterX(), radio[0].getCenterY(), radio[9].getCenterX(), radio[9].getCenterY());
g2d.draw(connection[0]);
addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
/**************************************************************************
This block of statements changes the radio buttons to green when clicked
and sets the colorChanged flag to true.
*************************************************************************/
if (!colorChanged && radio[0].contains(e.getX(), e.getY())) {
e.getSource();
currentColor = Color.GREEN;
colorChanged = true;
repaint(gD[2], gD[0], gD[0], gD[0]);
} else if (!colorChanged && radio[1].contains(e.getX(), e.getY())) {
e.getSource();
currentColor = Color.GREEN;
colorChanged = true;
repaint(gD[1], gD[1], gD[0], gD[0]);
} else if (!colorChanged && radio[2].contains(e.getX(), e.getY())) {
e.getSource();
currentColor = Color.GREEN;
colorChanged = true;
repaint(gD[0], gD[2], gD[0], gD[0]);
} else if (!colorChanged && radio[3].contains(e.getX(), e.getY())) {
e.getSource();
currentColor = Color.GREEN;
colorChanged = true;
repaint(gD[1], gD[3], gD[0], gD[0]);
} else if (!colorChanged && radio[4].contains(e.getX(), e.getY())) {
e.getSource();
currentColor = Color.GREEN;
colorChanged = true;
repaint(gD[2], gD[4], gD[0], gD[0]);
} else if (!colorChanged && radio[5].contains(e.getX(), e.getY())) {
e.getSource();
currentColor = Color.GREEN;
colorChanged = true;
repaint(gD[5], gD[0], gD[0], gD[0]);
} else if (!colorChanged && radio[6].contains(e.getX(), e.getY())) {
e.getSource();
currentColor = Color.GREEN;
colorChanged = true;
repaint(gD[6], gD[1], gD[0], gD[0]);
} else if (!colorChanged && radio[7].contains(e.getX(), e.getY())) {
e.getSource();
currentColor = Color.GREEN;
colorChanged = true;
repaint(gD[7], gD[2], gD[0], gD[0]);
} else if (!colorChanged && radio[8].contains(e.getX(), e.getY())) {
e.getSource();
currentColor = Color.GREEN;
colorChanged = true;
repaint(gD[6], gD[3], gD[0], gD[0]);
} else if (!colorChanged && radio[9].contains(e.getX(), e.getY())) {
e.getSource();
currentColor = Color.GREEN;
colorChanged = true;
repaint(gD[5], gD[4], gD[0], gD[0]);
/***************************************************************************
This block of statements changes the radio buttons to red when clicked
and sets the colorChanged flag to false
***************************************************************************/
} else if (colorChanged && radio[0].contains(e.getX(), e.getY())) {
e.getSource();
currentColor = Color.RED;
colorChanged = false;
repaint(gD[0], gD[0], gD[0], gD[0]);
} else if (colorChanged && radio[1].contains(e.getX(), e.getY())) {
e.getSource();
currentColor = Color.RED;
colorChanged = false;
repaint(gD[0], gD[1], gD[0], gD[0]);
} else if (colorChanged && radio[2].contains(e.getX(), e.getY())) {
e.getSource();
currentColor = Color.RED;
colorChanged = false;
repaint(gD[0], gD[2], gD[0], gD[0]);
} else if (colorChanged && radio[3].contains(e.getX(), e.getY())) {
e.getSource();
currentColor = Color.RED;
colorChanged = false;
repaint(gD[0], gD[3], gD[0], gD[0]);
} else if (colorChanged && radio[4].contains(e.getX(), e.getY())) {
e.getSource();
currentColor = Color.RED;
colorChanged = false;
repaint(gD[0], gD[4], gD[0], gD[0]);
} else if (colorChanged && radio[5].contains(e.getX(), e.getY())) {
e.getSource();
currentColor = Color.RED;
colorChanged = false;
repaint(gD[7], gD[0], gD[0], gD[0]);
} else if (colorChanged && radio[6].contains(e.getX(), e.getY())) {
e.getSource();
currentColor = Color.RED;
colorChanged = false;
repaint(gD[7], gD[1], gD[0], gD[0]);
} else if (colorChanged && radio[7].contains(e.getX(), e.getY())) {
e.getSource();
currentColor = Color.RED;
colorChanged = false;
repaint(gD[7], gD[2], gD[0], gD[0]);
} else if (colorChanged && radio[8].contains(e.getX(), e.getY())) {
e.getSource();
currentColor = Color.RED;
colorChanged = false;
repaint(gD[7], gD[3], gD[0], gD[0]);
} else if (colorChanged && radio[9].contains(e.getX(), e.getY())) {
e.getSource();
currentColor = Color.RED;
colorChanged = false;
repaint(gD[7], gD[4], gD[0], gD[0]);
}
}
});
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent mouseEvent) {
}
@Override
public void mouseReleased(MouseEvent mouseEvent) {
}
@Override
public void mouseEntered(MouseEvent mouseEvent) {
}
@Override
public void mouseExited(MouseEvent mouseEvent) {
}
}
Это FRONTPAGE класс
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.lang.*;
import javax.swing.JTabbedPane;
import javax.swing.JPanel;
import javax.swing.JFrame;
public class FrontPage extends JFrame{
private JPanel rootPanel;
private JButton buttonPushConfiguration;
private JTabbedPane tabbedPane;
public FrontPage() {
this.setBounds(new Rectangle(0, 0, 600, 600));
setContentPane(rootPanel);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
draw object = new draw();
//Creates the first tab
tabbedPane.addTab("Switch 1", object);
object.drawing();
buttonPushConfiguration.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(FrontPage.this, "Configuration Pushed to Panel");
}
});
}
}
Это основной класс
import javax.swing.*;
public class Main {
public static void main(String[] args) {
//Set the theme to the current system theme.
try {
UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName());
}
catch(UnsupportedLookAndFeelException e){
// handle exception
}
catch(ClassNotFoundException e){
// handle exception
}
catch(InstantiationException e){
// handle exception
}
catch(IllegalAccessException e){
}
//Instantiates FrontPage
new FrontPage();
}
}
вы хотите добавить MouseListener в методе живописи (здесь paintComponent), которая является то, что вы никогда не должны делать. Вероятно, это добавит много MouseListeners, неконтролируемое количество, к JPanel, когда вы действительно хотите только одного. Делайте только рисование в рамках метода paint или paintComponent и ничего больше. –
Далее: Ваш код выше компилируется, но будет вызывать NullPointerExceptions из многих мест, поскольку вы пытаетесь использовать неинициализированные компоненты. Пожалуйста, попробуйте исправить это до публикации здесь. Мы добровольцы и очень ценим это, если вы не слишком усердно экспериментируете с вашим кодом. Кроме того, вы захотите расширить свои основные проблемы. Вы заявляете, что хотите создать JPanels, но где и под каким стимулом? Нажатие кнопки? Пожалуйста, расскажите подробности еще раз, чтобы помочь нам понять вашу проблему и быть в состоянии помочь вам. –
Также расскажите о том, какие действия должен отображаться вашим графическим интерфейсом. Какая цель для MouseListener например? Что должно отображаться на JPANEL одной вкладки против другой? –