在我的一个java应用程序中,有一个用户应输入时间的字段.我知道,我可以简单地将它保持为正常状态JTextField,在验证时我可以检查值等等......
但我认为有一种更好的方式..
例如,如果这是一个有日期的问题,那么JXDatePicker(随附swingx)可以非常方便地使用.最终,用户选择保证是日期.
同样,必须有更好的时间选择方式.如果您知道更好的解决方案,有人会分享您的知识.
任何想法都表示赞赏.谢谢!
码:
import java.awt.Dimension;
import javax.swing.*;
public class Game extends JFrame {
private static final long serialVersionUID = -7919358146481096788L;
JPanel a = new JPanel();
public static void main(String[] args) {
new Game();
}
private Game() {
setTitle("Insert name of game here");
setLocationRelativeTo(null);
setLayout(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
a.setPreferredSize(new Dimension(600, 600));
add(a);
pack();
setVisible(true);
}
}
Run Code Online (Sandbox Code Playgroud)
所以我将首选大小设置JPanel为600乘600并打包帧,但帧的大小仍为0乘0.
为什么这样,我该如何解决?
这是我的代码:
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class Test{
public static void main(String[] args){
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run() {
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame();
JPanel jp = new JPanel();
jp.setMinimumSize(new Dimension(200, 200));
jp.setPreferredSize(new Dimension(200, 200));
//frame.getContentPane().setMinimumSize(new Dimension(200, 200));
//frame.getContentPane().setPreferredSize(new Dimension(200, 200));
frame.getContentPane().add(jp);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
它的行为完全符合我的要求。用户可以调整大小,JFrame但它总是足够大以容纳 200px x 200px JPanel。但是当我删除时:
JFrame.setDefaultLookAndFeelDecorated(true);
用户可以调整JFrame到任何大小。
为什么默认外观和感觉装饰会影响调整大小?我怎样才能让它工作没有setDefaultLookAndFeelDecorated(true)?我知道我可以手动设置帧最小尺寸 ( JFrame#setMinimumSize(new Dimension dim)),如果没有更智能的解决方案,我会这样做。
我在 Windows 7 上使用 jdk …
那JTextField是因为当我将鼠标移动到它应该是鼠标图标变为光标的位置时,当我点击它时就显示出来了.但它在发布时是看不见的.我错过了什么?
public class JavaSwingTextfield extends JFrame {
private static final long serialVersionUID = 1L;
JTextField myTextField;
public JavaSwingTextfield(){
/***** JFrame setup *****/
// Set the size of the window
setSize(600,600);
// Make the application close when the X is clicked on the window
setDefaultCloseOperation(EXIT_ON_CLOSE);
// Makes the JFrame visible to the user
setVisible(true);
/***** JFrame setup END *****/
/***** JButton setup *****/
// Create a JLabel and set its label to "Start"
myTextField = new JTextField("Start");
// Set …Run Code Online (Sandbox Code Playgroud) 需要一个简单的Swing代码来演示如何使用tablecellrenderer和tablecelleditor在Jtable的列中添加一个按钮.
我是Java图形和线程的新手,我正在尝试制作游戏(特别是Pong).这个想法是两个人可以在同一个键盘上玩(即有两个通过不同键控制的拨片).目前,两名球员不能同时移动他们的球拍.
这个问题有方法解决吗?单独的线程是答案吗?
如果可能的话,我希望桨能够同时移动(至少看似).
更新:似乎使用Set<Integer>存储按键是最好的选择.我已经完成了(并且它可以工作),但我想知道是否有任何此代码不在事件调度线程(EDT)上,如果我需要使用SwingUtilities.invokeLater();.这是必要的代码:
private Set<Integer> keysDown = Collections.synchronizedSet(new HashSet<Integer>());
public void keyPressed(KeyEvent e)
{
keysDown.add(e.getKeyCode());
}
public void keyReleased(KeyEvent e)
{
keysDown.remove(e.getKeyCode());
}
public void updatePaddlePositions()
{
if (keysDown.contains(KeyEvent.VK_W))
paddleOne.move(-PADDLE_MOVE_INCREMENT);
if (keysDown.contains(KeyEvent.VK_S))
paddleOne.move(PADDLE_MOVE_INCREMENT);
if (keysDown.contains(KeyEvent.VK_UP))
paddleTwo.move(-PADDLE_MOVE_INCREMENT);
if (keysDown.contains(KeyEvent.VK_DOWN))
paddleTwo.move(PADDLE_MOVE_INCREMENT);
try {
Thread.sleep(DELAY);
} catch (InterruptedException e) {
System.out.println("You Interrupted the game!");
}
canvas.repaint();
}
Run Code Online (Sandbox Code Playgroud)
这是对象的paintComponent方法canvas:
public void paintComponent(Graphics g)
{
super.paintComponent(g);
paddleOne.paint(g);
paddleTwo.paint(g);
updatePaddlePositions(); // Does this need to be …Run Code Online (Sandbox Code Playgroud) 我为这个长期问题道歉.
前几天我正在浏览一个论坛,我看到了一些链接到youtube和其他网站的文本.我必须始终突出显示,然后复制并粘贴或右键单击谷歌浏览器中的"转到".
由于我一直在玩Java,我想到制作自己的小程序,它会给出一个带有地址的文本的链接.例如,如果我说"嘿,看看这个视频我前几天看到了'www.youtube.com'"我希望youtube部分可以点击.
任何人都可以告诉我,如果这样的事情是可能的,如果是的话,我必须使用哪些库,最后,如何在java中找到所有导入和库的列表?
谢谢.
我正在使用JProgressBar组件以及Nimbus UI Defaults.问题是,当我想手动更改每个进度条的条形颜色时,我BasicProgressBarUI通过设置JProgressBar.setUI()功能来使用.这会带来更多麻烦,因为我想改变条形颜色,似乎我松开了jprogressbar的默认外观(Border,backgroundcolor dissappears).
所以我可以UIDefaults在代码初始化时设置Nimbus ProgressBar.有用.
但我想动态更改每个进度条的条形颜色.
有没有其他方法可以改变条形颜色JProgressBar?
public class ProgressGenerator extends JFrame {
protected int minValue = 0;
protected int maxValue = 100;
protected int counter = 0;
protected JProgressBar progressBar;
public ProgressGenerator() {
super("JProgressBar Demo");
setSize(300, 100);
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
} catch (ClassNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (InstantiationException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IllegalAccessException e1) {
// …Run Code Online (Sandbox Code Playgroud) 我刚刚学习java GUI的基础知识.我有这种奇怪的情况,我无法解释.
我有一个GUI类,我在其中构建一个简单的JFrame.如果我.setVisible(true) 在构造函数中使用一切正常,如果我在外面使用它,没有任何加载(窗口是可见的,但按钮和什么不是).
为什么会这样?
public class GUI extends JFrame {
private JTextField humanYears_TextField = new JTextField(3);
private JTextField dogYears_TextField = new JTextField(3);
private JButton convert_Button = new JButton("Convert");
private JLabel greeting = new JLabel ("Dog years to Human years!");
public GUI () {
JFrame window = new JFrame();
JPanel content = new JPanel();
content.setLayout(new FlowLayout());
content.add(this.greeting);
content.add(new JLabel("Dog Years: "));
content.add(this.dogYears_TextField);
content.add(this.convert_Button);
content.add(new JLabel("Human Years: "));
content.add(this.humanYears_TextField);
window.setContentPane(content);
pack(); // aplica contentPane-ul
window.setLocationRelativeTo(null); …Run Code Online (Sandbox Code Playgroud) 我正在尝试用 Java 制作一个简单的 2D 游戏。
据我所知,我的游戏应该由两个线程组成:“事件调度线程”(用于 GUI 操作)和“游戏线程”(用于游戏循环)。
我创建了一个大纲,但找不到放置游戏循环的位置。
简而言之,我正在尝试在不冻结 UI 线程的情况下创建游戏循环。
如果您能提供有关我做错的事情的任何信息,我将不胜感激。
这是我的游戏循环(您也可以提供提示以创建更好的游戏循环):
while(true) {
repaint();
try {
Thread.sleep(17);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class Main {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
createAndShowGUI();
}
});
}
private static void createAndShowGUI() {
JFrame frame = new JFrame("Forge …Run Code Online (Sandbox Code Playgroud)