, когда я нажимаю на соседний два переключателя, затем линия, нарисованная между этими кнопками, устанавливает условия в моем коде, которую линия будет рисовать только при выборе двух горизонтальных или вертикальных переключателей, еще показывая ошибку сообщение ........... это работает для меня, но если я случайно нажму на два переключателя, он выкинет исключение, которое я не могу понять, пожалуйста, дайте некоторое указание на ответ, потому что я тоже начинаю ...... ...... и что это означает, что он показывает, когда я компилирую прог .......... Примечание: C: \ Users \ MUHAMMAD Umair \ Desktop \ ComponentLinkerTest.java использует непроверенные или небезопасные операции. Примечание: перекомпиляция с -Xlint: непроверенная для деталей.не понял действия перечислителя радиокнопки
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import java.util.Map;
import java.util.*;
/**
* @see http://stackoverflow.com/a/12389479/909085
*/
public class ComponentLinkerTest extends JComponent
{
// private Map<JComponent, JComponent> linked;
Map<JComponent, java.util.List<JComponent> > linked;// = new HashMap<>();
int n=1;
public ComponentLinkerTest()
{
super();
linked = new HashMap();
}
static JRadioButton[] button = new JRadioButton[25];
public void gui()
{
setupLookAndFeel();
JFrame frame = new JFrame();
linker = new ComponentLinkerTest();
frame.setGlassPane (linker);
linker.setVisible (true);
JPanel content = new JPanel();
content.setLayout (new GridLayout (5, 5, 5, 5));
content.setBorder (BorderFactory.createEmptyBorder (5, 5, 5, 5));
frame.add (content);
int i;
for (i = 0; i < 25; i++)
{
// final JButton button = new JButton ("Button" + i);
button[i] = new JRadioButton();
// panel.add(fontButtons[i]);
button[i].addActionListener (new ActionListener()
{
public void actionPerformed (ActionEvent e)
{
link ((JRadioButton) e.getSource());
}
});
content.add (button [i]);
}
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo (null);
frame.setVisible (true);
}
/*public void link (JComponent c1, JComponent c2)
{
linked.put (c1, c2);
repaint();
}*/
public void link (JComponent c1, JComponent c2)
{
if(linked.containsKey(c1)){
linked.get(c1).add(c2);
}else{
java.util.List<JComponent> list = new LinkedList<>();
list.add(c2);
linked.put (c1, list);
}
repaint();
}
/* protected void paintComponent (Graphics g)
{
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint (RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setPaint (Color.BLACK);
for (JComponent c1 : linked.keySet())
{
Point p1 = getRectCenter (getBoundsInWindow (c1));
Point p2 = getRectCenter (getBoundsInWindow (linked.get (c1)));
/* Stroke stroke = new BasicStroke(8//,
/*BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 0,
new float[] { 12, 12 }, 0);
g2d.setStroke(stroke);
g2d.setColor(Color.RED);
g2d.drawLine (p1.x, p1.y, p2.x, p2.y);
}
}*/
@Override
protected void paintComponent (Graphics g)
{
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint (RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setPaint (Color.BLACK);
for (JComponent c1 : linked.keySet())
{
for(JComponent c2 : linked.get(c1)){
Point p1 = getRectCenter (getBoundsInWindow (c1));
Point p2 = getRectCenter (getBoundsInWindow (c2));
/* Stroke stroke = new BasicStroke(8//,
/*BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 0,
new float[] { 12, 12 }, 0);
g2d.setStroke(stroke);*/
if(n==1)
{
g2d.setColor(Color.RED);
n=2;
}
else
{
g2d.setColor(Color.BLUE);
n=1;
}
g2d.drawLine (p1.x, p1.y, p2.x, p2.y);
}
}
}
private Point getRectCenter (Rectangle rect)
{
return new Point (rect.x + rect.width/2, rect.y + rect.height/2);
}
private Rectangle getBoundsInWindow (Component component)
{
return getRelativeBounds (component, getRootPaneAncestor (component));
}
private Rectangle getRelativeBounds (Component component, Component relativeTo)
{
return new Rectangle (getRelativeLocation (component, relativeTo),
component.getSize());
}
private Point getRelativeLocation (Component component, Component relativeTo)
{
Point los = component.getLocationOnScreen();
Point rt = relativeTo.getLocationOnScreen();
return new Point (los.x - rt.x, los.y - rt.y);
}
private JRootPane getRootPaneAncestor (Component c)
{
for (Container p = c.getParent(); p != null; p = p.getParent())
{
if (p instanceof JRootPane)
{
return (JRootPane) p;
}
}
return null;
}
public boolean contains (int x, int y)
{
return false;
}
private static ComponentLinkerTest linker;
public static void main (String[] args)
{
ComponentLinkerTest ct = new ComponentLinkerTest();
ct.gui();
}
private static JRadioButton last = null;
private static void link (JRadioButton buton)
{
int a=0;
int i;
if (last == null)
{
last = buton;
System.out.println(last.getX());
}
else
{
for(i=0 ;i<25 ;i++)
{
if(buton == button[i])
{
if(button[i-1] == last || button[i+1]==last || button[i-5] == last || button[i+5]==last)
{
System.out.println("in cond");
linker.link (last, buton);
buton.setSelected(false);
last.setSelected(false);
last = null;
}
else
{
System.out.println("out cond");
buton.setSelected(false);
last.setSelected(false);
last = null;
JOptionPane.showMessageDialog(null,"Wrong position clicked ");
}
break;
}
else
{
System.out.println("button not found");
}
}
}
}
private static void setupLookAndFeel()
{
try
{
UIManager.setLookAndFeel (UIManager.getSystemLookAndFeelClassName());
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
catch (InstantiationException e)
{
e.printStackTrace();
}
catch (IllegalAccessException e)
{
e.printStackTrace();
}
catch (UnsupportedLookAndFeelException e)
{
e.printStackTrace();
}
}
}
1) Пожалуйста, добавьте письмо в верхнем регистре в начале предложения. Также используйте капитал для слова I, аббревиатуры и аббревиатуры, такие как JEE или WAR. Это облегчает людям понимание и помощь. 2) Вы до сих пор не задавали вопрос (не говоря уже о конкретном, ответственном вопросе). Какой у Вас вопрос? 3) Не сжимайте все свои проблемы в один пост. Идея SO заключается в том, что каждый поток представляет собой один Q & A (SO не является «одной остановкой, исправьте свой код»). –
Я получаю только «Исключение в потоке» AWT-EventQueue-0 «java.lang.ArrayIndexOutOfBoundsException», если я выбираю последнюю радиокнопку (нижний правый угол) в качестве второго параметра. – MadProgrammer
Я сталкиваюсь с проблемой, которую я описал в описании, если у вас есть какое-то решение, тогда помогите, java - это новое для меня –