gpt4 book ai didi

java - 垂直旋转 JTextField

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:57:58 25 4
gpt4 key购买 nike

我看到过许多询问如何以任意角度旋转 JLabel 或图像的问题。我需要做的就是将我的文本字段旋转 90 度,但我还没有找到专门针对该角度的更简单方法。我以为我正确地复制了答案,但我的文本字段没有旋转。

这是我正在做的事情的 SSCCE:

import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class VerticalRotationSSCCE {

private static class VerticalTextField extends JTextField {

private static final long serialVersionUID = 1L;

public VerticalTextField(String text) {
super(text);
}

@Override
protected void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
int cx = getWidth() / 2;
int cy = getHeight() / 2;
g2.rotate(1/2 * Math.PI, cx, cy);
super.paintComponent(g2);
}

}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {
JFrame frame = new JFrame();
frame.getContentPane().add(new VerticalTextField("Foo"));
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}

});
}

}

关于如何旋转组件的答案中我遗漏了什么?

最佳答案

实际上,是的,这是可以做到的,但需要一些额外的库和访问一些已经从网上消失的源代码。

使用JXLayer,可以在运行时转换 Activity 组件...

enter image description here

public class JLayerTransform {

public static void main(String[] args) {
new JLayerTransform();
}

public JLayerTransform() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}

JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new ExamplePane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}

public class ExamplePane extends JPanel {

private JSlider slider;
private FieldPane fieldPane;
private DefaultTransformModel transformModel;

public ExamplePane() {

setLayout(new BorderLayout());

slider = new JSlider(0, 360);
slider.setValue(0);
slider.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {

transformModel.setRotation(Math.toRadians(slider.getValue()));

}
});

fieldPane = new FieldPane();

transformModel = new DefaultTransformModel();
transformModel.setRotation(Math.toRadians(0));
transformModel.setScaleToPreferredSize(true);
JXLayer<JComponent> rotatePane = TransformUtils.createTransformJXLayer(fieldPane, transformModel);

add(slider, BorderLayout.NORTH);
add(rotatePane);

}
}

public class FieldPane extends JPanel {

public FieldPane() {
setLayout(new GridBagLayout());

JTextField field = new JTextField(10);
field.setText("Hello world");

add(field);

}
}
}

注意事项

这需要 JXLayer (我使用的是版本 3),SwingX (我用的是1.6.4版本)和Piet Blok的优秀例子,网上好像已经找不到了...

我已将 JXLayer(第 3 版)的所有源代码和 Piet 的示例放在一个 zip 中我建议,如果您有兴趣,可以拿一份副本并将其存放在安全的地方。

关于java - 垂直旋转 JTextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14324460/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com