这是我当前的代码:
package Calendar;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.Timer;
public class Clock extends JLabel {
private String pattern;
private Timer timer;
public Clock(String pattern){
this.pattern = pattern;
createTimer();
timer.start();
}
public Clock(){
pattern = "hh:mm:ss a";
createTimer();
timer.start();
}
private void createTimer(){
timer = new Timer(0, new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
setText(new SimpleDateFormat(pattern).format(new Date()));
}
});
}
public static void main(String[] args){
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel contentPane = new JPanel();
frame.setContentPane(contentPane);
Clock digitalClock = new Clock();
contentPane.add(digitalClock);
frame.setVisible(true);
}
}
我一辈子都不知道如何旋转这个。我看了其他几个论坛,但没有其他机构讨论这个问题。
据我所知,没有办法旋转JPanel或JFrame,所以我运气不好吗?
这就是它现在的样子:
数字时钟
我想把它旋转90度。基本上是垂直的。
编辑:解决方案:
package Calendar;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JLabel;
import javax.swing.Timer;
import java.awt.*;
import java.awt.geom.*;
public class Clock extends JLabel {
private String pattern;
private Timer timer;
public Clock ()
{
super();
pattern = "hh:mm:ss a";
createTimer();
timer.start();
}
public Clock(String pattern)
{
super (pattern);
this.pattern = pattern;
createTimer();
timer.start();
}
private void createTimer(){
timer = new Timer(0, new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
setText(new SimpleDateFormat(pattern).format(new Date()));
}
});
}
public void paint (Graphics g)
{
if (g instanceof Graphics2D) {
Graphics2D g2 = (Graphics2D) g;
AffineTransform flipTrans = new AffineTransform();
double widthD = (double) getWidth();
flipTrans.setToRotation(-Math.PI / 2.0, getWidth() / 2.0, getHeight() / 2.0);
g2.setTransform(flipTrans);
super.paint(g);
} else {
super.paint(g);
}
}
}
这是基于这个例子,并利用JXLayer以您想要的方式物理旋转标签组件。
它也让你不必自己画自定义的画。
我使用了类似的技术来旋转 JTabbedPane
选项卡,以便它们垂直沿着 JTabbedPane
的一侧运行
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.Timer;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import org.jdesktop.jxlayer.JXLayer;
import org.pbjar.jxlayer.demo.TransformUtils;
import org.pbjar.jxlayer.plaf.ext.transform.DefaultTransformModel;
public class RotateClock {
public static void main(String[] args) {
new RotateClock();
}
public RotateClock() {
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 Clock clock;
private DefaultTransformModel transformModel;
public ExamplePane() {
setLayout(new BorderLayout());
slider = new JSlider(0, 360);
slider.setValue(0);
slider.setSnapToTicks(true);
slider.setPaintTicks(true);
slider.setMajorTickSpacing(10);
slider.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
transformModel.setRotation(Math.toRadians(slider.getValue()));
}
});
clock = new Clock();
transformModel = new DefaultTransformModel();
transformModel.setRotation(Math.toRadians(0));
transformModel.setScaleToPreferredSize(true);
JXLayer<JComponent> rotatePane = TransformUtils.createTransformJXLayer(clock, transformModel);
add(slider, BorderLayout.NORTH);
add(rotatePane);
}
}
public class Clock extends JLabel {
private String pattern;
private Timer timer;
public Clock(String pattern) {
this.pattern = pattern;
setText(new SimpleDateFormat(pattern).format(new Date()));
createTimer();
timer.start();
}
public Clock() {
this("hh:mm:ss a");
}
private void createTimer() {
timer = new Timer(0, new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
setText(new SimpleDateFormat(pattern).format(new Date()));
}
});
timer.setInitialDelay(0);
}
}
}
这处理了鼠标事件的奇怪之处和组件的首选大小。
不幸的是,执行转换所需的代码(Piet的例子)在网上不再可用。
我已经将JXLayer(版本3)和Piet的示例的所有源代码放在一个zip中,我建议,如果您有兴趣,可以获取一份副本并将其存储在安全的地方。
问题内容: 是否有一个Java库,用于以90度为增量旋转JPEG文件,而不会导致图像质量下降? 问题答案: 我发现了这一点:http : //mediachest.sourceforge.net/mediautil/ API:http : //mediachest.sourceforge.net/mediautil/javadocs/mediautil/image/jpeg/LLJTran.htm
我一直在四处寻找,试图自学流媒体api。我制作了几个类,列出了宠物的arraylist,有一个抽象的方法来显示宠物的声音,这两个表达式分开使用效果很好 但我想看看是否可以将它们组合成一行代码,这样在列表打印出来之后,它就会打印出声音。我想完成的事情有参考代码吗?
问题内容: 我们将视频保存在移动客户端上,然后将其发送到服务器。在服务器上,我使用以下代码保存框架: 当我们在Windows Media Player或iTunes上播放视频时,它看起来不错。即玩家知道如何定向。 但是skvideo.io不知道,我们保存的那些帧会逆时针旋转90度。 我们如何将信息嵌入到skvideo知道正确方向的视频文件(.mov)文件中? 问题答案: skvideo中有一个小故
我如何制作
在我的应用程序中,我需要从相机加载图像。 这是我使用的代码: 但是如果我从图库中加载图片,它可以正常工作。 这里有什么错误?谢啦
本文向大家介绍写一个算法,可以将一个二维数组顺时针旋转90度,说一下思路。相关面试题,主要包含被问及写一个算法,可以将一个二维数组顺时针旋转90度,说一下思路。时的应答技巧和注意事项,需要的朋友参考一下 考察点:数组