我有一个 java 应用程序,我需要在其中使用和JLabel
方法旋转一个,我已经实现了一个可以移动.Graphics
Graphics2D
MouseMotionListener
JLabel
如果我可以旋转JLabel
,但它的内容会丢失。
这是我的代码。
public class Textos extends JLabel implements MouseMotionListener {
public void objeto() {
String valor;
if (FTexto.conTexto == true) {
valor = FTexto.TContenidos.getText();
NewJFrame.la = new JLabel(valor) {
public void paintComponent(Graphics g) {
Graphics2D gx = (Graphics2D) g;
gx.rotate(Math.toRadians(90), 10, 100);
super.paintComponent(g);
}
};
NewJFrame.la.setSize(80, 170);
NewJFrame.la.setOpaque(true);
NewJFrame.la.setBackground(Color.yellow);
NewJFrame.la.setFont(new Font(CFuente.getSelectedItem().toString(), Font.PLAIN, Integer.parseInt(String.valueOf(FTexto.CTama.getSelectedItem()))));
NewJFrame.la.setVerticalTextPosition(JLabel.TOP);
NewJFrame.la.setHorizontalTextPosition(JLabel.LEFT);
NewJFrame.PPanel1.add(NewJFrame.la, new Integer(3));
NewJFrame.labels.add(NewJFrame.la);
NewJFrame.indice++;
NewJFrame.la.repaint();
System.out.println(NewJFrame.labels.size());
NewJFrame.con2 = true;
NewJFrame.labels.get(NewJFrame.indice - 1).addMouseMotionListener(this);
} else {
valor = "";
NewJFrame.labels.get(NewJFrame.indice - 1).addMouseMotionListener(this);
}
}
}
我究竟做错了什么?
更新:
这是我必须创建它的代码,JLabel
它Jlabel
是在Frame
call中创建的NewJFrame.la
。如您所见,我有拖动方法可以移动标签
public class Textos extends JLabel implements MouseMotionListener {
public void objeto() {
String valor;
if (FTexto.conTexto == true) {
valor = FTexto.TContenidos.getText();
NewJFrame.la = new JLabel(valor) {
protected void paintComponent(Graphics grafico) {
Graphics2D graficoNuevo = (Graphics2D) grafico;
graficoNuevo.setRenderingHint(
RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON
);
AffineTransform at = graficoNuevo.getTransform();
Shape figura = graficoNuevo.getClip();
double X = getWidth() / 2.0;
double Y = getHeight() / 2.0;
at.rotate(Math.toRadians(90), X, Y);
graficoNuevo.setTransform(at);
graficoNuevo.setClip(figura);
super.paintComponent(grafico);
}
};
NewJFrame.la.setSize(200, 30);
NewJFrame.la.setOpaque(true);
NewJFrame.la.setBackground(Color.yellow);
NewJFrame.la.setFont(new Font(CFuente.getSelectedItem().toString(), Font.PLAIN, Integer.parseInt(String.valueOf(FTexto.CTama.getSelectedItem()))));
NewJFrame.la.setVerticalTextPosition(JLabel.TOP);
NewJFrame.la.setHorizontalTextPosition(JLabel.LEFT);
NewJFrame.PPanel1.add(NewJFrame.la, new Integer(3));
NewJFrame.labels.add(NewJFrame.la);
NewJFrame.indice++;
NewJFrame.la.repaint();
System.out.println(NewJFrame.labels.size());
NewJFrame.con2 = true;
NewJFrame.labels.get(NewJFrame.indice - 1).addMouseMotionListener(this);
} else {
valor = "";
NewJFrame.labels.get(NewJFrame.indice - 1).addMouseMotionListener(this);
}
}
@Override
public void mouseDragged(MouseEvent me) {
if (NewJFrame.labels.size() >= 1) {
if (me.getSource() == NewJFrame.labels.get(0)) {
NewJFrame.labels.get(0).setLocation(NewJFrame.labels.get(0).getX() + me.getX(), NewJFrame.labels.get(0).getY() + me.getY());
}
}
if (NewJFrame.labels.size() >= 2) {
if (me.getSource() == NewJFrame.labels.get(1)) {
NewJFrame.labels.get(1).setLocation(NewJFrame.labels.get(1).getX() + me.getX(), NewJFrame.labels.get(1).getY() + me.getY());
}
}
if (NewJFrame.labels.size() >= 3) {
if (me.getSource() == NewJFrame.labels.get(2)) {
NewJFrame.labels.get(2).setLocation(NewJFrame.labels.get(2).getX() + me.getX(), NewJFrame.labels.get(2).getY() + me.getY());
}
}
if (NewJFrame.labels.size() >= 4) {
if (me.getSource() == NewJFrame.labels.get(3)) {
NewJFrame.labels.get(3).setLocation(NewJFrame.labels.get(3).getX() + me.getX(), NewJFrame.labels.get(3).getY() + me.getY());
}
}
}
@Override
public void mouseMoved(MouseEvent me) {
if (NewJFrame.labels.size() >= 1) {
NewJFrame.labels.get(0).setCursor(new Cursor(Cursor.MOVE_CURSOR));
}
if (NewJFrame.labels.size() >= 2) {
NewJFrame.labels.get(1).setCursor(new Cursor(Cursor.MOVE_CURSOR));
}
if (NewJFrame.labels.size() >= 3) {
NewJFrame.labels.get(2).setCursor(new Cursor(Cursor.MOVE_CURSOR));
}
if (NewJFrame.labels.size() >= 4) {
NewJFrame.labels.get(3).setCursor(new Cursor(Cursor.MOVE_CURSOR));
}
}
}
代码
结果
解释
除了您已经在使用的方法之外
paintComponent()
,您还可以使用AffineTransform库,正如您在上述文档中看到的那样,该库用于旋转图形和图像。此外,对于本示例,我们使用了将其Math
指示为弧度 180 的库,为此我们将 JLabel 从一端旋转到另一端。